From ec95b25f9430aadc409335b6d81354f1ede707e8 Mon Sep 17 00:00:00 2001
From: Catalin Ghimici <152162343+catalinsymphony@users.noreply.github.com>
Date: Wed, 5 Nov 2025 18:37:38 +0200
Subject: [PATCH 1/3] add federation spec file
---
.../local/federation/federation_api.yaml | 7331 +++++++++++++++++
1 file changed, 7331 insertions(+)
create mode 100644 api_client_generation/local/federation/federation_api.yaml
diff --git a/api_client_generation/local/federation/federation_api.yaml b/api_client_generation/local/federation/federation_api.yaml
new file mode 100644
index 00000000..d03fd866
--- /dev/null
+++ b/api_client_generation/local/federation/federation_api.yaml
@@ -0,0 +1,7331 @@
+openapi: 3.0.0
+info:
+ title: SFS MS Admin API
+ description: see https://symphony-1.gitbook.io/federation/
+
+ version: 0.0.1
+
+servers:
+ - url: https://CONNECT-DOMAIN
+
+tags:
+ - name: Entitlements
+ description:
+ This API provides endpoints to add or remove advisor entitlements.
+
Entitlements allow an advisor to use an external network such as WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE.
+
+ - name: Contact
+ description:
+ This API provides endpoints to manage Contacts. A Contact is a client of the WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE network (also referred as external network). Advisor, a user of the Symphony connect platform. A contact represents the relation between an external user (a WhatsApp, Wechat, SMS, SMS Direct or LINE user), and an advisor.
+ When an advisor onboards, or adds an external user, they become one of their contacts
+
+ - name: Permissions
+ description:
+ An API for managing permissions. Permissions give an advisor the ability to perform certain actions, for example creating a room.
+ Note: Permissions are more specific than entitlements.
+ An entitlement gives an advisor the right to use an external network (for example, Wechat) whereas a permission gives access to a specific functionality within that external network. An entitlement is a precondiction for a permission.
+ If you want to grant the permission "create:room" to an advisor on WhatsApp, the advisor must have the WHATSAPP entitlement.
+
+paths:
+ /api/v2/customer/entitlements:
+ get:
+ tags:
+ - Entitlements
+ summary: List entitlements (recommended)
+ description: |
+ List the available entitlements.
+ operationId: listEntitlements
+ responses:
+ "200":
+ description: List of found entitlements
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/entitlements-response"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "403":
+ description: Operation forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_403_0"
+ security:
+ - sfsAuthentication: []
+ post:
+ tags:
+ - Entitlements
+ summary: Add entitlement (recommended)
+ description: Entitle a Symphony user to use the external network.
+ operationId: addEntitlement
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/entitlement-request"
+ responses:
+ "201":
+ description: The user has successfully been added in the list of entitlements.
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/add-entitlementv2-response"
+ "400":
+ description: Missing or malformed input
+ content:
+ application/json:
+ schema:
+ oneOf:
+ - $ref: "#/components/schemas/inline_response_400"
+ - $ref: "#/components/schemas/advisor-phone-number-not-supported-problem"
+ - $ref: "#/components/schemas/advisor-phone-number-is-required-problem"
+ - $ref: "#/components/schemas/pre-entitlement-permissions-not-supported-problem"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "403":
+ description: Add user forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/forbidden-entitlement-type"
+ "404":
+ description: Not found
+ content:
+ application/json:
+ schema:
+ oneOf:
+ - $ref: "#/components/schemas/tenant-configuration-not-found"
+ "409":
+ description: Conflict
+ content:
+ application/json:
+ schema:
+ oneOf:
+ - $ref: "#/components/schemas/advisor-phone-number-already-used-problem"
+ - $ref: "#/components/schemas/pre-entitlement-phone-number-mismatch"
+ - $ref: "#/components/schemas/number-not-available"
+ - $ref: "#/components/schemas/number-registration-not-possible"
+ "500":
+ description: Server error (SMS-Direct Second Number only)
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/no-available-number"
+
+ security:
+ - sfsAuthentication: []
+
+ /api/v1/customer/pre-entitlements/{symphonyId}/externalNetwork/{externalNetwork}:
+ post:
+ deprecated: true
+ tags:
+ - Customer pre-entitlements
+ summary: (deprecated) Pre-entitle an advisor to a phone number (WhatsApp Direct only)
+ operationId: addPreEntitlement
+ description: |
+ Pre-allocate a phone number to an advisor to allow the advisor to activate their phone number.
+ Supported on WhatsApp Direct only
+ Umony numbers are not eligible for pre-entitlements. Symphony users using Umony numbers can skip the pre-entitlement step and be entitled directly.
+ security:
+ - sfsAuthentication: [ ]
+ parameters:
+ - in: path
+ required: true
+ name: symphonyId
+ schema:
+ type: string
+ pattern: '^\d+$'
+ description: Symphony User Id
+ - in: path
+ required: true
+ name: externalNetwork
+ schema:
+ type: string
+ description: 'External network: WHATSAPP-DIRECT'
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/pre-entitlement-request'
+ responses:
+ '200':
+ description: The phone number has been successfully allocated to the user.
+ '409':
+ description: Missing or malformed input
+ content:
+ application/json:
+ schema:
+ oneOf:
+ - $ref: '#/components/schemas/advisor-already-has-phone-allocated-problem'
+ - $ref: '#/components/schemas/phone-number-already-allocated-problem'
+ '404':
+ description: Not Found
+ content:
+ application/json:
+ schema:
+ oneOf:
+ - $ref: '#/components/schemas/tenant-configuration-not-found'
+ '400':
+ description: Missing or malformed input
+ content:
+ application/json:
+ schema:
+ oneOf:
+ - $ref: '#/components/schemas/symphony-user-not-found-problem'
+ - $ref: '#/components/schemas/entitlement-type-not-found-problem'
+ - $ref: '#/components/schemas/phone-number-pre-allocation-not-supported-problem'
+ '500':
+ description: Pre-entitlement Failed
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/pre-entitlement-failed'
+ delete:
+ deprecated: true
+ tags:
+ - Customer pre-entitlements
+ summary: (deprecated) Remove an advisor pre-entitlement (WhatsApp Direct only)
+ operationId: removePreEntitlement
+ description: |
+ Remove an advisor pre-entitlement
+ Supported on WhatsApp Direct only
+ security:
+ - sfsAuthentication: [ ]
+ parameters:
+ - in: path
+ required: true
+ name: symphonyId
+ schema:
+ type: string
+ pattern: '^\d+$'
+ description: Symphony User Id
+ - in: path
+ required: true
+ name: externalNetwork
+ schema:
+ type: string
+ description: 'External network: WHATSAPP-DIRECT'
+ responses:
+ '200':
+ description: The pre-entitlement has been removed successfully.
+ '404':
+ description: Not Found
+ content:
+ application/json:
+ schema:
+ oneOf:
+ - $ref: '#/components/schemas/tenant-configuration-not-found'
+ - $ref: '#/components/schemas/pre-entitlement-not-found'
+ '403':
+ description: Forbidden
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/advisor-already-entitled'
+
+ '400':
+ description: Missing or malformed input
+ content:
+ application/json:
+ schema:
+ oneOf:
+ - $ref: '#/components/schemas/entitlement-type-not-found-problem'
+
+ /api/v1/customer/entitlements/externalNetwork/{externalNetwork}/advisors:
+ get:
+ tags:
+ - Entitlements
+ summary: List entitled advisors
+ description: |
+ List all entitled advisors on a given external network.
+ operationId: listEntitledAdvisors
+ parameters:
+ - name: externalNetwork
+ in: path
+ required: true
+ description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
+ schema:
+ type: string
+ example: WHATSAPP
+ - name: before
+ in: query
+ description: The before cursor for pagination
+ schema:
+ type: string
+ - name: after
+ in: query
+ description: The after cursor for pagination
+ schema:
+ type: string
+ - in: query
+ name: listPermissions
+ schema:
+ type: boolean
+ default: false
+ required: false
+ example: true
+ description: Boolean query parameter that indicates whether the search API will return the list of permissions per advisor return, or not
+ responses:
+ "200":
+ description: List of found entitled advisors.
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/entitled-response"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "403":
+ description: Operation forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_403_0"
+ security:
+ - sfsAuthentication: []
+ "/api/v2/customer/advisor/entitlements":
+ get:
+ tags:
+ - Entitlements
+ summary: Get an advisor's entitlement (recommended)
+ description: |
+ Check if a given advisor is entitled for a given external network.
+ Advisors can be identified using their email address or their Symphony user ID
+ (if both are provided, the Symphony user ID will take precedence)
+ operationId: getCustomerEntitlement
+ parameters:
+ - name: advisorEmailAddress
+ in: query
+ description: Symphony user email address
+ required: false
+ schema:
+ type: string
+ example: william.smith@symphony.com
+ - name: advisorSymphonyId
+ in: query
+ description: Symphony user ID
+ required: false
+ schema:
+ type: string
+ example: 12345678912365
+ - name: externalNetwork
+ in: query
+ description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
+ required: true
+ schema:
+ type: string
+ example: WHATSAPP
+ responses:
+ "200":
+ description: Advisor data (if an entitled advisor has been found)
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/entitlement-response"
+ '400':
+ description: Missing or malformed input
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/advisor-id-not-provided'
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "403":
+ description: Operation forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_403_0"
+ "404":
+ description: Entitlement not found (if no entitled advisor matching the parameters has been found)
+ content:
+ application/json:
+ schema:
+ oneOf:
+ - $ref: "#/components/schemas/entitlement-not-found-problem"
+ "500":
+ description: No available number
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/no-available-number"
+ security:
+ - sfsAuthentication: []
+ delete:
+ tags:
+ - Entitlements
+ summary: Remove entitlement (recommended)
+ description: |
+ Removes a given advisor's entitlement for a given external network.
+ Advisors can be identified using their email address or their Symphony user ID
+ (if both are provided, the Symphony user ID will take precedence)
+ operationId: deleteCustomerEntitlement
+ parameters:
+ - name: advisorEmailAddress
+ in: query
+ description: Advisor's email address
+ required: false
+ schema:
+ type: string
+ example: william.smith@symphony.com
+ - name: advisorSymphonyId
+ in: query
+ description: Symphony user ID
+ required: false
+ schema:
+ type: string
+ example: 12345678912365
+ - name: externalNetwork
+ in: query
+ description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
+ required: true
+ schema:
+ type: string
+ example: WHATSAPP
+ responses:
+ "200":
+ description: The entitlement has been successfully removed.
+ "404":
+ description: Entitlement not found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/entitlement-not-found-problem"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "403":
+ description: Operation forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_403_0"
+ security:
+ - sfsAuthentication: []
+ "/api/v1/customer/entitlements/{symphonyId}/entitlementType/{entitlementType}":
+ get:
+ deprecated: true
+ tags:
+ - Entitlements
+ summary: Get an advisor's entitlement searching by Symphony user ID for a given external network (deprecated)
+ description: |
+ Get an advisor's entitlement searching by Symphony user ID for a given external network
+ operationId: getCustomerEntitlementBySymphonyId
+ parameters:
+ - name: symphonyId
+ in: path
+ description: Symphony user ID
+ required: true
+ schema:
+ type: string
+ example: 12345678912365
+ - name: entitlementType
+ in: path
+ description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
+ required: true
+ schema:
+ type: string
+ example: WHATSAPP
+ responses:
+ "200":
+ description: Entitlement found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/entitlement-response"
+ "404":
+ description: Entitlement not found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/entitlement-not-found-problem"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "403":
+ description: Operation forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_403_0"
+ security:
+ - sfsAuthentication: []
+ delete:
+ deprecated: true
+ tags:
+ - Entitlements
+ summary: Remove an advisor's entitlement by Symphony user ID for a given external network (deprecated)
+ description: |
+ Remove an advisor's entitlement for a given external network
+ operationId: deleteCustomerEntitlementBySymphonyId
+ parameters:
+ - name: symphonyId
+ in: path
+ description: Symphony user ID
+ required: true
+ schema:
+ type: string
+ example: 12345678912365
+ - name: entitlementType
+ in: path
+ description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
+ required: true
+ schema:
+ type: string
+ example: WHATSAPP
+ responses:
+ "200":
+ description: The entitlement has been successfully removed
+ "404":
+ description: Entitlement not found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/entitlement-not-found-problem"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "403":
+ description: Operation forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_403_0"
+ security:
+ - sfsAuthentication: []
+
+ "/api/v1/customer/advisors/{advisorSymphonyId}/blockedPhoneNumbers":
+ post:
+ tags:
+ - CustomerBlock
+ summary: Block phone numbers
+ operationId: blockPhoneNumbers
+ description: |
+ Block phone numbers for an advisor.
+ security:
+ - sfsAuthentication: [ ]
+ parameters:
+ - in: path
+ name: advisorSymphonyId
+ schema:
+ type: string
+ pattern: '^\d+$'
+ required: true
+ description: The symphonyId for which we are blocking the phone numbers
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/customer-block-phone-numbers-request'
+ responses:
+ '200':
+ description: Request processed
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/customer-block-phone-numbers-response'
+ '403':
+ description: Forbidden
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/not-entitled-on-direct-emp'
+ '404':
+ description: Not found
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/advisor-not-found'
+ get:
+ tags:
+ - CustomerBlock
+ summary: Get blocked phone numbers
+ operationId: getBlockPhoneNumbers
+ description: |
+ Get blocked phone numbers for an advisor.
+ security:
+ - sfsAuthentication: [ ]
+ parameters:
+ - in: path
+ name: advisorSymphonyId
+ schema:
+ type: string
+ pattern: '^\d+$'
+ required: true
+ description: The Symphony ID for which we are getting the blocked phone numbers
+ responses:
+ '200':
+ description: Request processed
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/get-blocked-phone-numbers-response'
+ '403':
+ description: Forbidden
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/not-entitled-on-direct-emp'
+ '404':
+ description: Forbidden
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/advisor-not-found'
+ delete:
+ tags:
+ - CustomerBlock
+ summary: Unblock phone numbers
+ operationId: unblockPhoneNumbers
+ description: |
+ Unblock phone numbers for an advisor.
+ security:
+ - sfsAuthentication: [ ]
+ parameters:
+ - in: path
+ name: advisorSymphonyId
+ schema:
+ type: string
+ pattern: '^\d+$'
+ required: true
+ description: The Symphony ID for which we are unblocking the phone numbers
+ - in: query
+ name: phoneNumbers
+ schema:
+ type: array
+ items:
+ type: string
+ format: phone
+ minItems: 1
+ maxItems: 100
+ required: true
+ description: The phone numbers that we want to unblock for the specified advisor
+ responses:
+ '200':
+ description: Request processed
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/customer-block-phone-numbers-response'
+ '403':
+ description: Forbidden
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/not-entitled-on-direct-emp'
+ '404':
+ description: Not found
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/advisor-not-found'
+
+ "/api/v2/customer/advisors/{advisorSymphonyId}/blockedPhoneNumbers":
+ post:
+ tags:
+ - CustomerBlock
+ summary: Block phone numbers (recommended)
+ operationId: blockPhoneNumbersv2
+ description: |
+ Block phone numbers for an advisor.
+ security:
+ - sfsAuthentication: [ ]
+ parameters:
+ - in: path
+ name: advisorSymphonyId
+ schema:
+ type: string
+ pattern: '^\d+$'
+ required: true
+ description: The symphonyId for which we are blocking the phone numbers
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/customer-block-phone-numbers-request'
+ responses:
+ '200':
+ description: Request processed
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/customer-block-phone-numbers-response'
+ '403':
+ description: Forbidden
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/not-entitled-on-direct-emp'
+ '404':
+ description: Not found
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/advisor-not-found'
+ get:
+ tags:
+ - CustomerBlock
+ summary: Get blocked phone numbers (recommended)
+ operationId: getBlockPhoneNumbersv2
+ description: |
+ Get blocked phone numbers for an advisor.
+ security:
+ - sfsAuthentication: [ ]
+ parameters:
+ - in: path
+ name: advisorSymphonyId
+ schema:
+ type: string
+ pattern: '^\d+$'
+ required: true
+ description: The Symphony ID for which we are getting the blocked phone numbers
+ responses:
+ '200':
+ description: Request processed
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/get-blocked-phone-numbers-response'
+ '403':
+ description: Forbidden
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/not-entitled-on-direct-emp'
+ '404':
+ description: Forbidden
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/advisor-not-found'
+ delete:
+ tags:
+ - CustomerBlock
+ summary: Unblock phone numbers (recommended)
+ operationId: unblockPhoneNumbersv2
+ description: |
+ Unblock phone numbers for an advisor.
+ security:
+ - sfsAuthentication: [ ]
+ parameters:
+ - in: path
+ name: advisorSymphonyId
+ schema:
+ type: string
+ pattern: '^\d+$'
+ required: true
+ description: The Symphony ID for which we are unblocking the phone numbers
+ responses:
+ '200':
+ description: Request processed
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/customer-block-phone-numbers-response'
+ '403':
+ description: Forbidden
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/not-entitled-on-direct-emp'
+ '404':
+ description: Not found
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/advisor-not-found'
+
+ "/api/v2/customer/contacts/{contactSymphonyId}/advisor/{advisorSymphonyId}":
+ delete:
+ tags:
+ - Contact
+ summary: Remove contact (recommended)
+ description: |
+ Remove an advisor's contact searching by the advisor's Symphony user ID and the contact's Symphony user ID
+ operationId: deleteContactv2
+ parameters:
+ - name: advisorSymphonyId
+ in: path
+ description: Advisor's Symphony user ID
+ required: true
+ schema:
+ type: string
+ format: number
+ example: 1234567890
+ - name: contactSymphonyId
+ in: path
+ description: Contact's Symphony user ID
+ required: true
+ schema:
+ type: string
+ format: number
+ example: 1234567890
+ responses:
+ "204":
+ description: Contact successfully removed
+ "404":
+ description: Contact not found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/contact-not-found"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ security:
+ - sfsAuthentication: []
+ "/api/v1/customer/contacts/advisorEmailAddress/{advisorEmailAddress}/contactEmailAddress/{contactEmailAddress}/externalNetwork/{externalNetwork}":
+ delete:
+ deprecated: true
+ tags:
+ - Contact
+ summary: Remove an advisor's contact (deprecated)
+ description: |
+ Remove an advisor's contact searching by the advisor's email address and the contact's email address for a given external network.
+ operationId: deleteContact
+ parameters:
+ - name: advisorEmailAddress
+ in: path
+ description: Advisor's email address
+ required: true
+ schema:
+ type: string
+ format: email
+ example: william.smith@symphony.com
+ - name: contactEmailAddress
+ in: path
+ description: Contact's email address
+ required: true
+ schema:
+ type: string
+ format: email
+ example: johndoe@symphony.com
+ - name: externalNetwork
+ in: path
+ description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
+ required: true
+ schema:
+ type: string
+ example: WHATSAPP
+ responses:
+ "204":
+ description: Contact successfully removed
+ "404":
+ description: Contact not found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/contact-not-found"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "403":
+ description: Operation forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_403_0"
+ security:
+ - sfsAuthentication: []
+ "/api/v2/customer/contacts/{contactSymphonyId}":
+ delete:
+ tags:
+ - Contact
+ summary: Remove the contact from all advisors they are connected to for a given external network (recommended)
+ description: |
+ Remove the contact from all the advisors they are connected to for a given external network.
+ operationId: deleteContactsBySymphonyIdAndExternalNetworkv2
+ parameters:
+ - name: contactSymphonyId
+ in: path
+ description: Contact's Symphony user ID
+ required: true
+ schema:
+ type: string
+ format: number
+ example: 1234567890
+ responses:
+ "200":
+ description: Contact found. The response includes a status report (SUCCESS or FAILURE) of the connection removal for each advisors initially connected to the contact.
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/customer-contactsWithId-responsev2"
+ "404":
+ description: Contact not found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/contact-not-found"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "403":
+ description: Operation forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_403_0"
+ security:
+ - sfsAuthentication: []
+ put:
+ tags:
+ - Contact
+ summary: Update contact (recommended)
+ description: |
+ Update a contact's first name, last name, company name (maximum 100 characters) and, if the advisor has the permission for this, the contact's email address for a given external network.
+ Note: Updating a contact's phone number is not supported.
+ # to be validated
The "advisorEmailAddress" is the email address of the advisor who 1st onboarded the contact.
+ operationId: updateContactsv2
+ parameters:
+ - name: contactSymphonyId
+ in: path
+ description: Contact's Symphony user ID
+ required: true
+ schema:
+ type: string
+ example: 1234567890
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/customer-update-contacts-requestv2"
+ responses:
+ "200":
+ description: Contact successfully updated
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/update-contacts-response-v2"
+ "400":
+ description: Missing or malformed input
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/external-network-not-found"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "403":
+ description: Update user forbidden
+ content:
+ application/json:
+ schema:
+ oneOf:
+ - $ref: "#/components/schemas/inline_response_403_1"
+ - $ref: "#/components/schemas/inline_response_403_0"
+ - $ref: "#/components/schemas/cannot-edit-advisor-own-contact-email"
+ "404":
+ description: Contact not found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_404_4"
+ "409":
+ description: Conflict
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/user-already-exists"
+ "500":
+ description: Contact update failed
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/update-account-failed"
+ security:
+ - sfsAuthentication: []
+ "/api/v1/customer/contacts/{contactSymphonyId}/copy":
+ post:
+ tags:
+ - Contact
+ summary: Copy contact
+ description: |
+ Create a new contact copy.
+ Some contacts might be shared between tenants. Shared contacts updates are not allowed.
+ This API allows to create a contact copy that is dedicated for the requesting tenant and that can be updated.
+
+ Contacts that are created starting from the 23.03 release are already not shared between tenants. This API is dedicated for shared contacts created prior to the 23.03 release.
+
+ Please note:
+
+ - A new account is created for the user, with a new Symphony user ID.
+ - There is no change in the user's data.
+ - The original user account is removed from all rooms and the new account is added to these rooms. Then, a system message is pushed to each room: Maintenance completed on account: {contact first name} {contact last name}. No action on your part is required.
+ - The email format of the user will appear differently in Content Export. Old format: {network}.{phone}@symphony.com. New format: {network}.{phone}.{tenantId}@symphony.com
+ - This API is only supported for WHATSAPP and SMS contacts.
+ - Users who are still part of Symphony IMs cannot be copied. IMs should be first removed from Federation Services.
+ - The copy action is not required for users onboarded by a single tenant before the 23.03 release, or for all users onboarded after 23.03 release.
+
+ operationId: copyContact
+ parameters:
+ - name: contactSymphonyId
+ in: path
+ description: Contact's Symphony ID
+ required: true
+ schema:
+ type: string
+ pattern: '^\d+$'
+ example: 1234567890
+ responses:
+ "200":
+ description: Contact successfully copied
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/copy-contact-response"
+ "400":
+ description: Missing or malformed input
+ content:
+ application/json:
+ schema:
+ oneOf:
+ - $ref: "#/components/schemas/user-copy-not-supported-for-network"
+ "403":
+ description: Copy user forbidden
+ content:
+ application/json:
+ schema:
+ oneOf:
+ - $ref: '#/components/schemas/forbidden-entitlement-type'
+ - $ref: '#/components/schemas/user-copy-not-supported-for-ims'
+ "404":
+ description: Contact not found
+ content:
+ application/json:
+ schema:
+ oneOf:
+ - $ref: "#/components/schemas/contact-not-found"
+ '409':
+ description: Conflict
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/current-tenant-has-own-user-copy'
+ "500":
+ description: Contact update failed
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/copy-contact-failed"
+ security:
+ - sfsAuthentication: []
+ "/api/v1/customer/contacts/contactEmailAddress/{contactEmailAddress}/externalNetwork/{externalNetwork}":
+ delete:
+ deprecated: true
+ tags:
+ - Contact
+ summary: Remove the contact from all advisors they are connected to for a given external network (deprecated)
+ description: |
+ Removes the contact from all the advisors they are connected to, searching by the contact's email address and the external network. This operation will only affect the tenant's advisors.
+ operationId: deleteContactsByEmailAndExternalNetwork
+ parameters:
+ - name: contactEmailAddress
+ in: path
+ description: Contact's email address
+ required: true
+ schema:
+ type: string
+ format: email
+ example: johndoe@symphony.com
+ - name: externalNetwork
+ in: path
+ description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
+ required: true
+ schema:
+ type: string
+ example: WHATSAPP
+ responses:
+ "200":
+ description: Contact found. The response includes a status report (SUCCESS or FAILURE) of the connection removal for each advisor initially connected to the contact.
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/customer-contactsWithId-response"
+ "404":
+ description: Contact not found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/contact-not-found"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "403":
+ description: Operation forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_403_0"
+ security:
+ - sfsAuthentication: []
+ /api/v2/customer/contacts/removal:
+ post:
+ tags:
+ - Contact
+ summary: Bulk remove advisor-contact connection (recommended)
+ description: |
+ Remove specific advisor-contact connections in bulk.
+ operationId: deleteContactsv2
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/deleteContacts-requestv2"
+ responses:
+ "200":
+ description: Contacts found. The response includes a status report (SUCCESS, NOT_FOUND or FAILURE) of the connection removal for each advisor initially connected to each contact in the array of objects.
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/deleteContacts-responsev2"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "403":
+ description: Operation forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_403_0"
+ security:
+ - sfsAuthentication: []
+ /api/v1/customer/contacts/removal:
+ post:
+ deprecated: true
+ tags:
+ - Contact
+ summary: Remove specific advisor-contact connections in bulk (deprecated)
+ description: |
+ Bulk remove the connections between advisor-contact pairs. Takes in the body of the request an array of objects composed of advisor's email address, contact's email address and external network.
+ operationId: deleteContacts
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/deleteContacts-request"
+ responses:
+ "200":
+ description: Contacts found. The response includes a status report (SUCCESS or FAILURE) of the connection removal for each advisor initially connected to each contact in the array of objects.
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/deleteContacts-response"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "403":
+ description: Operation forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_403_0"
+ security:
+ - sfsAuthentication: []
+ "/api/v2/customer/contacts/advisor/{advisorSymphonyId}":
+ delete:
+ tags:
+ - Contact
+ summary: Remove all contacts (recommended)
+ description: |
+ Removes all contacts of an advisor matching the advisor's Symphony user ID.
+ operationId: deleteAdvisorContactsv2
+ parameters:
+ - name: advisorSymphonyId
+ in: path
+ description: Advisor's Symphony user ID
+ required: true
+ schema:
+ type: string
+ format: number
+ example: 1234567890
+ responses:
+ "200":
+ description: Call completed - Report provided with the list of SUCCESSFUL and FAILED operations
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/customer-deleteAdvisorContacts-responsev2"
+ "404":
+ description: Advisor or contact not found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_404_1"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "403":
+ description: Operation forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_403_0"
+ security:
+ - sfsAuthentication: []
+ "/api/v1/customer/contacts/advisorEmailAddress/{advisorEmailAddress}":
+ delete:
+ deprecated: true
+ tags:
+ - Contact
+ summary: Removes all contacts of a given advisor (deprecated)
+ description: |
+ Removes all the contacts of an advisor matching the advisor's email address.
+ operationId: deleteAdvisorContacts
+ parameters:
+ - name: advisorEmailAddress
+ in: path
+ description: Advisor's email address
+ required: true
+ schema:
+ type: string
+ example: william.smith@symphony.com
+ responses:
+ "200":
+ description: Call completed - Report provided with the list of SUCCESSFUL and FAILED operations
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/deleteContacts-response"
+ "404":
+ description: Advisor or contact not found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_404_1"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "403":
+ description: Operation forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_403_0"
+ security:
+ - sfsAuthentication: []
+
+
+ /api/v1/customer/permissions:
+ get:
+ tags:
+ - Permissions
+ summary: List permissions
+ description: |
+ List of available permissions for the external network at "CONNECT-DOMAIN"
+ operationId: listPermissions
+ responses:
+ "200":
+ description: List of permissions found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/permissions-response"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "403":
+ description: Operation forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_403_0"
+ security:
+ - sfsAuthentication: []
+ /api/v1/customer/externalNetwork/{externalNetwork}/permissions:
+ get:
+ tags:
+ - Permissions
+ summary: List EMP Permissions
+ operationId: listEmpPermissions
+ description: |
+ List all permissions available for the external network at "CONNECT-DOMAIN"
+ For each permission, returns id, name and whether they are set by default or not
+ parameters:
+ - name: externalNetwork
+ in: path
+ description: The external network.
+ required: true
+ schema:
+ type: string
+ example: "WHATSAPP"
+ responses:
+ "200":
+ description: List of EMP permissions found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/enhanced-permissions-response"
+ security:
+ - sfsAuthentication: [ ]
+ "/api/v2/customer/advisors/{advisorSymphonyId}/externalNetwork/{externalNetwork}/permissions":
+ get:
+ tags:
+ - Permissions
+ summary: List advisor's permissions (recommended)
+ description: |
+ List the permissions granted to an advisor on an external network.
+ operationId: listAdvisorPermissionsBySymphonyId
+ parameters:
+ - name: advisorSymphonyId
+ in: path
+ description: Advisor's Symphony user ID
+ required: true
+ schema:
+ type: string
+ example: 1234567890
+ - name: externalNetwork
+ in: path
+ description: "The external network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
+ required: true
+ schema:
+ type: string
+ example: WHATSAPP
+ responses:
+ "200":
+ description: List of advisor's permissions
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/advisor-permissions-response"
+ "404":
+ description: Advisor not found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/advisor-not-found"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "403":
+ description: Operation forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_403_0"
+ security:
+ - sfsAuthentication: []
+ post:
+ tags:
+ - Permissions
+ summary: Add permission to an advisor (recommended)
+ description: |
+ Grant permission to an advisor. \
+ Refer to the Permissions table on the Authentication page for the default permissions. \
+ For multi-company contacts, the contacts must be from the same network, e.g. all from WeChat or all from WhatsApp. Cross-network rooms are not authorized.
+ operationId: addPermissionBySymphonyId
+ parameters:
+ - name: advisorSymphonyId
+ in: path
+ description: Advisor's Symphony user ID
+ required: true
+ schema:
+ type: string
+ example: 1234567890
+ - name: externalNetwork
+ in: path
+ description: The external network
+ required: true
+ schema:
+ type: string
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/advisor-permission-request"
+ responses:
+ "200":
+ description: Permission successfully added to the advisor
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/advisor-permission-response"
+ "404":
+ description: Not found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_404_2"
+ "409":
+ description: Conflict
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/permission-already-assigned"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "403":
+ description: Operation forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_403_0"
+ security:
+ - sfsAuthentication: []
+ "/api/v1/customer/advisors/advisorEmailAddress/{advisorEmailAddress}/externalNetwork/{externalNetwork}/permissions":
+ get:
+ deprecated: true
+ tags:
+ - Permissions
+ summary: List advisor's permissions (deprecated)
+ description: |
+ List an advisor's permissions.
+ operationId: listAdvisorPermissionsByEmail
+ parameters:
+ - name: advisorEmailAddress
+ in: path
+ description: Advisor's email address
+ required: true
+ schema:
+ type: string
+ example: william.smith@symphony.com
+ - name: externalNetwork
+ in: path
+ description: "The external network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
+ required: true
+ schema:
+ type: string
+ example: WHATSAPP
+ responses:
+ "200":
+ description: List of advisor's permissions
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/advisor-permissions-response"
+ "404":
+ description: Advisor not found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/advisor-not-found"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "403":
+ description: Operation forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_403_0"
+ security:
+ - sfsAuthentication: []
+ post:
+ deprecated: true
+ tags:
+ - Permissions
+ summary: Add permission to an advisor (deprecated)
+ description: |
+ Grant permission to an advisor. \
+ Refer to the Permissions table on the Authentication page for the default permissions. \
+ For multi-company contacts, the contacts must be from the same network, e.g. all from WeChat or all from WhatsApp. Cross-network rooms are not authorized.
+ operationId: addPermissionByEmail
+ parameters:
+ - name: advisorEmailAddress
+ in: path
+ description: Advisor's email address
+ required: true
+ schema:
+ type: string
+ - name: externalNetwork
+ in: path
+ description: The external network
+ required: true
+ schema:
+ type: string
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/advisor-permission-request"
+ responses:
+ "200":
+ description: Permission successfully added to the advisor
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/advisor-permission-response"
+ "404":
+ description: Not found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_404_2"
+ "409":
+ description: Conflict
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/permission-already-assigned"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "403":
+ description: Operation forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_403_0"
+ security:
+ - sfsAuthentication: []
+
+ "/api/v2/customer/advisors/{advisorSymphonyId}/externalNetwork/{externalNetwork}/permissions/{permissionName}":
+ delete:
+ tags:
+ - Permissions
+ summary: Remove permission (recommended)
+ description: Remove a permission from an advisor.
+ operationId: removePermissionBySymphonyIdv2
+ parameters:
+ - name: advisorSymphonyId
+ in: path
+ description: Advisor's Symphony user ID
+ required: true
+ schema:
+ type: string
+ - name: externalNetwork
+ in: path
+ description: The external network
+ required: true
+ schema:
+ type: string
+ - name: permissionName
+ in: path
+ description: permissionName to remove
+ required: true
+ schema:
+ type: string
+ responses:
+ "204":
+ description: Permission successfully removed
+ "404":
+ description: Advisor not found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_404_3"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "403":
+ description: Operation forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_403_0"
+ security:
+ - sfsAuthentication: []
+ "/api/v1/customer/advisors/advisorEmailAddress/{advisorEmailAddress}/externalNetwork/{externalNetwork}/permissions/{permissionName}":
+ delete:
+ deprecated: true
+ tags:
+ - Permissions
+ summary: Remove permission from an advisor (deprecated)
+ description: Remove a permission from an advisor.
+ operationId: removePermissionByEmail
+ parameters:
+ - name: advisorEmailAddress
+ in: path
+ description: Advisor's email address
+ required: true
+ schema:
+ type: string
+ - name: externalNetwork
+ in: path
+ description: The external network
+ required: true
+ schema:
+ type: string
+ - name: permissionName
+ in: path
+ description: permissionName to remove
+ required: true
+ schema:
+ type: string
+ responses:
+ "200":
+ description: Permission removed successfully
+ "404":
+ description: Advisor not found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_404_3"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "403":
+ description: Operation forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_403_0"
+ security:
+ - sfsAuthentication: []
+
+ /api/v2/customer/advisors/permissions:
+ post:
+ tags:
+ - Permissions
+ summary: Add a permission to multiple advisors (recommended)
+ description: "Grant permission to multiple advisors."
+ operationId: addPermissionToMultipleAdvisor
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/advisors-permission-requestv2"
+ responses:
+ "200":
+ description: Permission successfully added to the advisor
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/multiple-advisor-permission-response"
+ "404":
+ description: Not found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_404_2"
+ "409":
+ description: Conflict
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/permission-already-assigned"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "403":
+ description: Operation forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_403_0"
+ security:
+ - sfsAuthentication: []
+ /api/v1/customer/advisors/permissions:
+ post:
+ deprecated: true
+ tags:
+ - Permissions
+ summary: Add permission to multiple advisors (deprecated)
+ description: "Add a permission to multiple advisors."
+ operationId: addPermissionToMultipleAdvisorByEmail
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/advisors-permission-request"
+ responses:
+ "200":
+ description: Permission successfully added to the advisor
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/multiple-advisor-permission-response"
+ "404":
+ description: Not found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_404_2"
+ "409":
+ description: Conflict
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/permission-already-assigned"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "403":
+ description: Operation forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_403_0"
+ security:
+ - sfsAuthentication: []
+
+ # delete:
+ # tags:
+ # - Permissions
+ # summary: Remove permission from multiple advisors
+ # description: |
+ # => Remove a permission from multiple advisors. **This endpoint will return an error 400**
+ # operationId: removePermissionFromMultipleAdvisorByEmail
+ # requestBody:
+ # content:
+ # application/json:
+ # schema:
+ # $ref: '#/components/schemas/advisor-permission-request'
+ # responses:
+ # '200':
+ # description: Request has been processed
+ # content:
+ # application/json:
+ # schema:
+ # $ref: '#/components/schemas/multiple-advisor-permission-response'
+ # '400':
+ # description: Request was not well formed
+ # content:
+ # application/json:
+ # schema:
+ # $ref: '#/components/schemas/inline_response_400'
+ # '401':
+ # description: Unauthorized
+ # content:
+ # application/json:
+ # schema:
+ # $ref: '#/components/schemas/inline_response_401'
+ # '403':
+ # description: Operation forbidden
+ # content:
+ # application/json:
+ # schema:
+ # $ref: '#/components/schemas/inline_response_403_0'
+ # security:
+ # - sfsAuthentication: []
+ # '/api/v1/customer/advisors/advisorEmailAddress/{advisorEmailAddress}/permissions':
+ # post:
+ # tags:
+ # - Permissions
+ # summary: Add permission to an advisor for all external networks
+ # description: => Add a permission to an advisor for all external networks.
+ # operationId: addPermissionForAllEnsByEmail
+ # parameters:
+ # - name: advisorEmailAddress
+ # in: path
+ # description: Advisor's email address
+ # required: true
+ # schema:
+ # type: string
+ # example: william.smith@symphony.com
+ # requestBody:
+ # content:
+ # application/json:
+ # schema:
+ # $ref: '#/components/schemas/advisor-permission-request'
+ # responses:
+ # '200':
+ # description: Operation completed
+ # content:
+ # application/json:
+ # schema:
+ # $ref: '#/components/schemas/bulk-advisor-permission-response'
+ # '404':
+ # description: Not found
+ # content:
+ # application/json:
+ # schema:
+ # $ref: '#/components/schemas/inline_response_404_2'
+ # '401':
+ # description: Unauthorized
+ # content:
+ # application/json:
+ # schema:
+ # $ref: '#/components/schemas/inline_response_401'
+ # '403':
+ # description: Operation forbidden
+ # content:
+ # application/json:
+ # schema:
+ # $ref: '#/components/schemas/inline_response_403_0'
+ # security:
+ # - sfsAuthentication: []
+ /api/v2/customer/contacts:
+ post:
+ tags:
+ - Contact
+ summary: Add a contact and/or advisors to a contact (recommended)
+ description: |
+ Add a contact and/or advisor(s) to the contact.
+ This end point can be called in 2 situations:
+
+ - To create a contact and eventually immediately associate one or more advisors.
+ - To add more advisors to an existing contact.
+
+ In both cases, you must provide all the contact's mandatory fields listed as "body params".
+
+ **Note**
+
+
+ - If both advisorSymphonyId and advisorEmailAddresses are passed, the advisorSymphonyId will prevail.
+
+ operationId: addContact
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/customer-contact-request"
+ responses:
+ "200":
+ description: Contact added successfully
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/add-contact-response"
+ "400":
+ description: Missing or malformed input
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_400_1"
+ "403":
+ description: Onboard user forbidden
+ content:
+ application/json:
+ schema:
+ oneOf:
+ - $ref: "#/components/schemas/inline_response_403"
+ - $ref: "#/components/schemas/inline_response_403_0"
+ - $ref: '#/components/schemas/user-id-mismatch'
+ - $ref: '#/components/schemas/phone-international-onboarding-forbidden'
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "404":
+ description: Not found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/tenant-configuration-not-found"
+ "409":
+ description: Conflict
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_409"
+ "500":
+ description: User creation failed
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/create-account-failed"
+ security:
+ - sfsAuthentication: []
+ get:
+ tags:
+ - Search
+ summary: List contacts (recommended)
+ description: |
+ List contacts, can query by emailAddress, phoneNumber or by contactSymphonyId or by advisorSymphonyId.
+ If the advisor has the admin:list-customers permission, they will be able to retrieve all pod contacts for a given externalNetwork, or to see other advisor's list of contacts.
+ operationId: listContacts2
+ parameters:
+ - name: externalNetwork
+ in: query
+ description: "The external network: WHATSAPP, SMS, WECHAT, SMS-DIRECT, LINE or WHATSAPP-DIRECT"
+ required: true
+ schema:
+ minLength: 1
+ type: string
+ example: WHATSAPP
+ - name: emailAddress
+ in: query
+ description: Contact's email address
+ required: false
+ schema:
+ type: string
+ format: email
+ example: johndoe@symphony.com
+ - name: phoneNumber
+ in: query
+ description: Contact's phone number
+ required: false
+ schema:
+ type: string
+ format: phone
+ example: +33 1 23 45 67 89
+ - name: symphonyId
+ in: query
+ description: Contact's Symphony user ID
+ required: false
+ schema:
+ type: string
+ pattern: '^\d+$'
+ example: 1234567890
+ - name: advisorSymphonyId
+ in: query
+ description: The advisor's Symphony ID
+ required: false
+ schema:
+ type: string
+ pattern: '^\d+$'
+ example: 1234567890
+ - name: phoneBlocked
+ in: query
+ description: Filter only available or blocked contact's phones
+ required: false
+ schema:
+ type: string
+ enum:
+ - "all"
+ - "false"
+ - "true"
+ default: all
+ - name: before
+ in: query
+ description: The before cursor for pagination
+ required: false
+ schema:
+ type: string
+ - name: after
+ in: query
+ description: The after cursor for pagination
+ required: false
+ schema:
+ type: string
+ responses:
+ "200":
+ description: Contact found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/list-contact-response"
+ "404":
+ description: Contact or tenant not found
+ content:
+ application/json:
+ schema:
+ oneOf:
+ - $ref: '#/components/schemas/contact-not-found'
+ - $ref: '#/components/schemas/tenant-not-found'
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "403":
+ description: Operation forbidden
+ content:
+ application/json:
+ schema:
+ oneOf:
+ - $ref: "#/components/schemas/inline_response_403_0"
+ - $ref: '#/components/schemas/user-id-mismatch'
+ security:
+ - sfsAuthentication: []
+
+ /api/v1/customer/contacts:
+ get:
+ deprecated: true
+ tags:
+ - Search
+ summary: Find a contact (deprecated)
+ description: |
+ Find a contact searching by email address and external network
+ operationId: findContacts
+ parameters:
+ - name: externalNetwork
+ in: query
+ description: "The external network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
+ required: true
+ schema:
+ minLength: 1
+ type: string
+ example: WHATSAPP
+ - name: emailAddress
+ in: query
+ description: Contact's email address
+ required: true
+ schema:
+ type: string
+ format: email
+ example: johndoe@symphony.com
+ responses:
+ "200":
+ description: Contact found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/find-contact-response"
+ "404":
+ description: Contact not found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/contact-not-found"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "403":
+ description: Operation forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_403_0"
+ security:
+ - sfsAuthentication: []
+ "/api/v1/customer/contacts/{contactEmailAddress}/update":
+ post:
+ deprecated: true
+ tags:
+ - Contact
+ summary: Update Contact (deprecated)
+ description: |
+ Update the first name, last name, company name (maximum 100 characters long) of a contact for a given external network.
+
Updating the contact's email address or phone number is not supported.
+ # to be validated
the "advisorEmailAddress" is the email address of the advisor that first onboarded the contact.
+ operationId: updateContacts
+ parameters:
+ - name: contactEmailAddress
+ in: path
+ description: Contact's email address
+ required: true
+ schema:
+ type: string
+ example: johndoe@symphony.com
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/customer-update-contacts-request"
+ responses:
+ "200":
+ description: Contact successfully updated
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/update-contacts-response"
+ "400":
+ description: Missing or malformed input
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/external-network-not-found"
+ "403":
+ description: Update user forbidden
+ content:
+ application/json:
+ schema:
+ oneOf:
+ - $ref: "#/components/schemas/inline_response_403_1"
+ - $ref: "#/components/schemas/inline_response_403_0"
+ - $ref: "#/components/schemas/cannot-edit-advisor-own-contact-email"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "404":
+ description: Contact not found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_404_4"
+ "500":
+ description: Contact update failed
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/update-account-failed"
+ security:
+ - sfsAuthentication: []
+ /api/v1/customer/advisors:
+ get:
+ deprecated: true
+ tags:
+ - Search
+ summary: Search for an advisor (deprecated)
+ description: |
+ Search for an advisor by email address or Symphony user ID and external network.
+ operationId: findAdvisor
+ parameters:
+ - name: externalNetwork
+ in: query
+ description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
+ required: true
+ schema:
+ minLength: 1
+ type: string
+ example: WHATSAPP
+ - name: advisorEmailAddress
+ in: query
+ description: Advisor's email address
+ required: false
+ schema:
+ type: string
+ format: email
+ example: william.smith@symphony.com
+ - name: advisorSymphonyId
+ in: query
+ description: Advisor's Symphony user ID
+ required: false
+ schema:
+ type: string
+ format: email
+ example: 1234567890
+ responses:
+ "200":
+ description: Advisor found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/entitlement-response"
+ "404":
+ description: Advisor not found (Advisor may not be entitled for this external network)
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_404_5"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "403":
+ description: Operation forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_403_0"
+ security:
+ - sfsAuthentication: []
+
+ "/api/v2/customer/contact":
+ get:
+ tags:
+ - Search
+ summary: Get contact
+ description: |
+ Get a contact searching by their phone number, their external network and, optionally, their advisor's federation group.
+ operationId: getContact
+ parameters:
+ - in: query
+ name: phoneNumber
+ description: contact's phone number
+ schema:
+ type: string
+ format: phone
+ required: true
+ - in: query
+ name: externalNetwork
+ description: contact's external network
+ schema:
+ type: string
+ required: true
+ - in: query
+ name: federationGroupId
+ description: contact's federationGroupId
+ schema:
+ type: string
+ responses:
+ '200':
+ description: Contact found
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/find-contact-response-v2'
+ '400':
+ description: Bad Request
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/external-network-not-found'
+ '404':
+ description: Not found
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/inline_response_404_6'
+ security:
+ - sfsAuthentication: []
+
+ "/api/v2/customer/contacts/{contactSymphonyId}/advisors":
+ get:
+ tags:
+ - Search
+ summary: List a contact’s advisors (recommended)
+ description: |
+ Search for the advisors of a provided contact email address for a given external network.
+ operationId: findAdvisorsv2
+ parameters:
+ - name: contactSymphonyId
+ in: path
+ description: The Contact's Symphony user ID
+ required: true
+ schema:
+ type: string
+ format: number
+ example: 1234567890
+ - in: query
+ name: before
+ schema:
+ type: string
+ description: The before cursor for pagination
+ - in: query
+ name: after
+ schema:
+ type: string
+ description: The after cursor for pagination
+ responses:
+ "200":
+ description: List of advisor(s) found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/advisors-search-response"
+ "404":
+ description: Contact not found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_404_6"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "403":
+ description: Operation forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_403_0"
+ security:
+ - sfsAuthentication: []
+
+ "/api/v1/customer/contacts/externalNetwork/{externalNetwork}/search":
+ get:
+ tags:
+ - CustomerContact
+ summary: Search contacts
+ operationId: searchContacts
+ description: >
+ => Search an advisor's contacts related to a given externalNetwork
+ security:
+ - sfsAuthentication: [ ]
+ parameters:
+ - in: path
+ name: externalNetwork
+ schema:
+ type: string
+ required: true
+ example: WHATSAPP
+ - in: query
+ name: query
+ required: true
+ schema:
+ type: string
+ description: Start search by first name, then last name and then display name
+ example: o
+ responses:
+ "200":
+ description: List of contacts found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/search-contacts-response"
+
+ "/api/v1/customer/contacts/contactEmailAddress/{contactEmailAddress}/externalNetwork/{externalNetwork}/advisors":
+ get:
+ deprecated: true
+ tags:
+ - Search
+ summary: Search the advisors of a contact (deprecated)
+ description: |
+ Search for the advisors of a provided contact email address for a given external network.
+ operationId: findAdvisors
+ parameters:
+ - name: externalNetwork
+ in: path
+ description: "The external network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
+ required: true
+ schema:
+ minLength: 1
+ type: string
+ example: WHATSAPP
+ - name: contactEmailAddress
+ in: path
+ description: Contact's email address
+ required: true
+ schema:
+ type: string
+ format: email
+ example: johndoe@symphony.com
+ responses:
+ "200":
+ description: List of advisor(s) found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/advisors-search-response"
+ "404":
+ description: Contact not found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_404_6"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "403":
+ description: Operation forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_403_0"
+ security:
+ - sfsAuthentication: []
+
+ "/api/v1/customer/advisors/{advisorSymphonyId}/externalNetwork/{externalNetwork}/contacts":
+ get:
+ tags:
+ - Search
+ summary: List an advisor's contacts (recommended)
+ description: |
+ Search for the contacts associated with the provided advisor’s Symphony user ID for a given external network.
+ operationId: findContactsOfAdvisorv2
+ parameters:
+ - name: externalNetwork
+ in: path
+ description: "The external network: WHATSAPP, SMS, WECHAT, SMS-DIRECT, LINE or WHATSAPP-DIRECT"
+ required: true
+ schema:
+ minLength: 1
+ type: string
+ example: WHATSAPP
+ - name: advisorSymphonyId
+ in: path
+ description: Advisor's Symphony user ID
+ required: true
+ schema:
+ type: string
+ format: number
+ example: 1234567890
+ - in: query
+ name: before
+ schema:
+ type: string
+ description: The before cursor for pagination
+ - in: query
+ name: after
+ schema:
+ type: string
+ description: The after cursor for pagination
+ responses:
+ "200":
+ description: List of contacts(s) found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/contacts-response"
+ "404":
+ description: Advisor not found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_404_5"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "403":
+ description: Operation forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_403_0"
+ security:
+ - sfsAuthentication: []
+ "/api/v1/customer/advisors/advisorEmailAddress/{advisorEmailAddress}/externalNetwork/{externalNetwork}/contacts":
+ get:
+ deprecated: true
+ tags:
+ - Search
+ summary: Search an advisor's contacts (deprecated)
+ description: |
+ Search for contacts associated with the advisor whose email address is provided for a given external network.
+ operationId: findContactsOfAdvisor
+ parameters:
+ - name: externalNetwork
+ in: path
+ description: "The external network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
+ required: true
+ schema:
+ minLength: 1
+ type: string
+ example: WHATSAPP
+ - name: advisorEmailAddress
+ in: path
+ description: Advisor's email address
+ required: true
+ schema:
+ type: string
+ format: email
+ example: william.smith@symphony.com
+ responses:
+ "200":
+ description: List of contacts(s) found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/contacts-response"
+ "404":
+ description: Advisor not found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_404_5"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "403":
+ description: Operation forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_403_0"
+ security:
+ - sfsAuthentication: []
+
+ /api/v2/customer/rooms:
+ get:
+ tags:
+ - Room
+ summary: List an advisor's rooms (recommended)
+ description: |
+ List all rooms where an advisor is either a member or an owner for a given network.
+ Search is performed with the advisor's Symphony user ID.
+ This end point returns at most 25 records per page.
+ operationId: listRoomsv2
+ parameters:
+ - name: advisorSymphonyId
+ in: query
+ description: Advisor's Symphony user ID
+ required: true
+ schema:
+ type: string
+ format: number
+ example: 1234567890
+ - name: externalNetwork
+ in: query
+ description: "The external network: WECHAT or WHATSAPP or WHATSAPP-DIRECT or SMS or SMS-DIRECT or LINE"
+ required: true
+ schema:
+ type: string
+ example: WHATSAPP
+ - name: owner
+ in: query
+ description:
+ If set to "true", lists the rooms where the advisor is an owner.
+ If set to "false", lists the rooms where the advisor is an owner and the rooms where the advisor is only a member.
+ schema:
+ type: boolean
+ default: true
+ - name: before
+ in: query
+ description: The before cursor for pagination
+ schema:
+ type: string
+ - name: after
+ in: query
+ description: The after cursor for pagination
+ schema:
+ type: string
+ responses:
+ "200":
+ description: List of rooms found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/rooms-response"
+ "400":
+ description: Missing or malformed parameter
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/invalid-page-cursor"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "403":
+ description: Operation forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_403_0"
+ '404':
+ description: Not found
+ content:
+ application/json:
+ schema:
+ oneOf:
+ - $ref: '#/components/schemas/tenant-configuration-not-found'
+ - $ref: '#/components/schemas/advisor-not-found'
+ security:
+ - sfsAuthentication: []
+ post:
+ tags:
+ - Room
+ summary: Create room (recommended)
+ description: |
+ Create a room with the advisor whose Symphony user ID is provided.
+ The advisor is set as a member.
+ "externalNetworkRoomDisplayName" applies for WeChat only.
+ operationId: createRoomv2
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/room-requestv2"
+ responses:
+ "200":
+ description: Room created successfully
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/room-creation-response-v2"
+ "400":
+ description: Bad request
+ content:
+ application/json:
+ schema:
+ oneOf:
+ - $ref: "#/components/schemas/inline_response_400_2"
+ - $ref: "#/components/schemas/incompatible-external-network-and-request-body"
+ "403":
+ description: Forbidden
+ content:
+ application/json:
+ schema:
+ oneOf:
+ - $ref: "#/components/schemas/inline_response_403_2"
+ - $ref: "#/components/schemas/inline_response_403_0"
+ - $ref: "#/components/schemas/federation-group-emp-forbidden"
+ - $ref: '#/components/schemas/user-id-mismatch'
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "404":
+ description: Advisor not found
+ content:
+ application/json:
+ schema:
+ oneOf:
+ - $ref: "#/components/schemas/inline_response_404_7"
+ - $ref: "#/components/schemas/federation-group-not-found"
+ "409":
+ description: Conflict (room name already exists)
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/room-already-exists"
+ "500":
+ description: Room creation failed
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_500"
+ security:
+ - sfsAuthentication: []
+ /api/v1/customer/rooms:
+ get:
+ deprecated: true
+ tags:
+ - Room
+ summary: List an advisor's rooms (deprecated)
+ description: |
+ List all rooms where an advisor is either a member or an owner for a given network.
+ The search is performed with the advisor's email address.
+ This end point returns at most 25 records per page.
+ operationId: listRooms
+ parameters:
+ - name: advisorEmailAddress
+ in: query
+ description: Advisor's email address
+ required: true
+ schema:
+ type: string
+ format: email
+ example: william.smith@symphony.com
+ - name: externalNetwork
+ in: query
+ description: "The external network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
+ required: true
+ schema:
+ type: string
+ example: WHATSAPP
+ - name: owner
+ in: query
+ description:
+ If set to "true", list the rooms where the advisor is an owner.
+ If set to "false", list the rooms where the advisor is only a member.
+ schema:
+ type: boolean
+ default: true
+ - name: before
+ in: query
+ description: The before cursor for pagination
+ schema:
+ type: string
+ - name: after
+ in: query
+ description: The after cursor for pagination
+ schema:
+ type: string
+ responses:
+ "200":
+ description: List of rooms found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/rooms-response"
+ "400":
+ description: Missing or malformed parameter
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/invalid-page-cursor"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "403":
+ description: Operation forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_403_0"
+ security:
+ - sfsAuthentication: []
+ post:
+ deprecated: true
+ tags:
+ - Room
+ summary: Create room (deprecated)
+ description: |
+ Create a room with the advisor whose email address is provided.
+ The advisor is set as a member.
+ operationId: createRoom
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/room-request"
+ responses:
+ "200":
+ description: Room created successfully
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/room-creation-response"
+ "400":
+ description: Bad request
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_400_2"
+ "403":
+ description: Forbidden
+ content:
+ application/json:
+ schema:
+ oneOf:
+ - $ref: "#/components/schemas/inline_response_403_2"
+ - $ref: "#/components/schemas/inline_response_403_0"
+ - $ref: "#/components/schemas/federation-group-emp-forbidden"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "404":
+ description: Not found
+ content:
+ application/json:
+ schema:
+ oneOf:
+ - $ref: "#/components/schemas/inline_response_404_7"
+ - $ref: "#/components/schemas/federation-group-not-found"
+ "409":
+ description: Conflict (room name already exists)
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/room-already-exists"
+ "500":
+ description: Room creation failed
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_500"
+ security:
+ - sfsAuthentication: []
+
+ /api/v1/customer/rooms/{streamId}/rename:
+ post:
+ tags:
+ - Room
+ summary: Rename a room
+ operationId: renameRoom
+ description: |
+ Rename a room with the new room name which is provided.
+ security:
+ - sfsAuthentication: [ ]
+ parameters:
+ - in: path
+ name: streamId
+ schema:
+ type: string
+ required: true
+ description: StreamId of the room to rename.
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/rename-room-request'
+ responses:
+ '200':
+ description: Room name updated successfully
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/rename-room-response'
+ '401':
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/inline_response_401'
+ '403':
+ description: Forbidden
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/rename-room-forbidden'
+ '404':
+ description: Room not found
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/room-not-found'
+ '409':
+ description: Conflict
+ content:
+ application/json:
+ schema:
+ oneOf:
+ - $ref: '#/components/schemas/room-already-exists'
+ - $ref: '#/components/schemas/different-room-name-required'
+ - $ref: '#/components/schemas/cannot-rename-room-duplicate-room-name'
+ - $ref: '#/components/schemas/room-is-deactivated'
+ '500':
+ description: Rename room failed
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/rename-room-failed'
+
+ "/api/v1/customer/rooms/{streamId}/ownership":
+ post:
+ tags:
+ - Room
+ summary: Transfer room ownership to another advisor
+ operationId: transferRoomOwnership
+ description: |
+ Transfer the room ownership to the advisor matching the provided Symphony user ID.
+ This advisor should already be a member of the room.
+ security:
+ - sfsAuthentication: [ ]
+ parameters:
+ - in: path
+ name: streamId
+ schema:
+ type: string
+ required: true
+ description: StreamId of the room to transfer.
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/transfer-room-ownership-request'
+ responses:
+ '204':
+ description: Room owner updated successfully
+ '404':
+ description: Not found
+ content:
+ application/json:
+ schema:
+ oneOf:
+ - $ref: '#/components/schemas/tenant-configuration-not-found'
+ - $ref: '#/components/schemas/advisor-not-found'
+ - $ref: '#/components/schemas/room-not-found'
+ '409':
+ description: Conflict
+ content:
+ application/json:
+ schema:
+ oneOf:
+ - $ref: '#/components/schemas/already-room-owner'
+ - $ref: '#/components/schemas/not-a-room-member'
+ - $ref: '#/components/schemas/room-is-deactivated'
+ - $ref: '#/components/schemas/cannot-transfer-room-ownership-duplicate-room-name'
+
+ "/api/v2/customer/rooms/{streamId}/members":
+ delete:
+ tags:
+ - Room
+ summary: Remove room member (recommended)
+ description:
+ Remove any member, advisor or contact from a room.
+ The room is identified by its streamID.
+ operationId: removeRoomMemberv2
+ parameters:
+ - name: streamId
+ in: path
+ description: |
+ Room's streamId.
+ The streamId needs to be URLsafe Base64.
+ To obtain the URLSafe Base64 Conversation ID:
+ - replace forward slashes / with underscores
+ - replace pluses + with minuses -
+ - ignore any trailing equal signs =
+ For example, the URLSafe Base64 encoding of: lX1hwfmQ+AK/k/a/BB0y2n///q2+0KfbdA== converts to lX1hwfmQ-AK_k_a_BB0y2n___q2-0KfbdA.
+ required: true
+ schema:
+ type: string
+ example: bjHSiY4iz3ar4iIh6-VzCX___peoM7cPdA
+ - name: memberSymphonyId
+ in: query
+ description: The Symphony user ID of the member to remove
+ required: true
+ schema:
+ type: string
+ format: number
+ example: 1234567890
+ - name: advisorSymphonyId
+ in: query
+ description: The Symphony user ID of the advisor who is removing the member
+ required: true
+ schema:
+ type: number
+ example: 1234567890
+ responses:
+ "200":
+ description: Member successfully removed from the room
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/remove-room-members-response"
+ "403":
+ description: Forbidden
+ content:
+ application/json:
+ schema:
+ oneOf:
+ - $ref: "#/components/schemas/inline_response_403_3"
+ - $ref: "#/components/schemas/inline_response_403_0"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "404":
+ description: Not found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_404_8"
+ "409":
+ description: Conflict
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_409_1"
+ security:
+ - sfsAuthentication: []
+ post:
+ tags:
+ - Room
+ summary: Add room member (recommended)
+ description: |
+ Add a member to a room:
+
+ - An advisor must be entitled for the relevant external network.
+ - A contact must have already been onboarded.
+
+ operationId: addRoomMemberMultiRoomv2
+ parameters:
+ - name: streamId
+ in: path
+ description: |
+ Room's streamId.
+ The streamID needs to be URLsafe Base64.
+ To obtain the URLSafe Base64 conversation ID:
+ - Replace forward slashes / with underscores _
+ - Replace pluses + with minuses -
+ - Ignore any trailing equal signs =
+ For example, the URLSafe Base64 encoding of: lX1hwfmQ+AK/k/a/BB0y2n///q2+0KfbdA== converts to lX1hwfmQ-AK_k_a_BB0y2n___q2-0KfbdA.
+ required: true
+ schema:
+ type: string
+ example: bjHSiY4iz3ar4iIh6-VzCX___peoM7cPdA
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/room-member-requestv2"
+ responses:
+ "200":
+ description: Member successfully added to the room
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/room-member-response"
+ "400":
+ description: Forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_400_3"
+ "403":
+ description: Forbidden
+ content:
+ application/json:
+ schema:
+ oneOf:
+ - $ref: "#/components/schemas/inline_response_403_2"
+ - $ref: "#/components/schemas/inline_response_403_0"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "404":
+ description: Not found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_404_9"
+ "409":
+ description: Conflict
+ content:
+ application/json:
+ schema:
+ oneOf:
+ - $ref: "#/components/schemas/room-is-deactivated"
+ - $ref: "#/components/schemas/add-room-member-conflicted"
+ "500":
+ description: Failed to add member to the room
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/add-room-member-failed"
+ security:
+ - sfsAuthentication: []
+ /api/v1/customer/rooms/{streamId}/members:
+ get:
+ tags:
+ - Room
+ summary: List room members
+ description: |
+ List a room’s members. The room is identified by its streamID.
+ operationId: listRoomMembers
+ parameters:
+ - name: streamId
+ in: path
+ description: |
+ Room's streamId.
+ The streamId needs to be URL safe Base64.
+ To obtain the URLSafe Base64 conversation ID:
+ - Replace forward slashes / with underscores _
+ - Replace pluses + with minuses -
+ - Ignore any trailing equal signs =
+ For example, the URLSafe Base64 encoding of: lX1hwfmQ+AK/k/a/BB0y2n///q2+0KfbdA== converts to lX1hwfmQ-AK_k_a_BB0y2n___q2-0KfbdA.
+ required: true
+ schema:
+ type: string
+ example: lX1hwfmQ-AK_k_a_BB0y2n___q2-0KfbdA
+ - name: before
+ in: query
+ description: The before cursor for pagination
+ schema:
+ type: string
+ - name: after
+ in: query
+ description: The after cursor for pagination
+ schema:
+ type: string
+ responses:
+ "200":
+ description: List of room members
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/room-members-response"
+ "400":
+ description: Missing or malformed parameter
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/invalid-page-cursor"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "403":
+ description: Operation forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_403_0"
+ security:
+ - sfsAuthentication: []
+ delete:
+ deprecated: true
+ tags:
+ - Room
+ summary: Remove room member (deprecated)
+ description:
+ Remove a member from a room, be it an advisor or a contact.
+ The room is identified by its streamId.
+ operationId: removeRoomMember
+ parameters:
+ - name: streamId
+ in: path
+ description: |
+ Room's streamId.
+ The streamId needs to be URL safe Base64.
+ To obtain the URLSafe Base64 conversation ID:
+ - Replace forward slashes / with underscores _
+ - Replace pluses + with minuses -
+ - Ignore any trailing equal signs =
+ For example, the URLSafe Base64 encoding of: lX1hwfmQ+AK/k/a/BB0y2n///q2+0KfbdA== converts to lX1hwfmQ-AK_k_a_BB0y2n___q2-0KfbdA.
+
+ required: true
+ schema:
+ type: string
+ example: bjHSiY4iz3ar4iIh6-VzCX___peoM7cPdA
+ - name: memberEmailAddress
+ in: query
+ description: The email address of the member to remove
+ required: true
+ schema:
+ type: string
+ format: email
+ example: johndoe@symphony.com
+ - name: externalNetwork
+ in: query
+ description: "The external network of the member to remove: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
+ required: true
+ schema:
+ type: string
+ example: WHATSAPP
+ - name: advisorEmailAddress
+ in: query
+ description: The email address of the advisor who is removing the member
+ required: true
+ schema:
+ type: string
+ example: william.smith@symphony.com
+ - name: contact
+ in: query
+ description: If set to "true", the member to remove is a contact.
+ If set to "false", the member to remove is an advisor.
+ required: true
+ schema:
+ type: boolean
+ responses:
+ "200":
+ description: Member successfully removed from the room
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/remove-room-members-response"
+ "403":
+ description: Forbidden
+ content:
+ application/json:
+ schema:
+ oneOf:
+ - $ref: "#/components/schemas/inline_response_403_3"
+ - $ref: "#/components/schemas/inline_response_403_0"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "404":
+ description: Not found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_404_8"
+ security:
+ - sfsAuthentication: []
+ /api/v1/customer/rooms/{streamId}/features:
+ post:
+ tags:
+ - Room
+ summary: Update a room's features
+ description: |
+ Update a room's features. Only supported for WhatsApp. The room is identified by its streamID.
+ operationId: updateRoomFeatures
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/room-features-request"
+ parameters:
+ - name: streamId
+ in: path
+ description: |
+ Room's streamId.
+ The streamId needs to be URLsafe Base64.
+ To obtain the URLSafe Base64 conversation ID:
+ - Replace forward slashes / with underscores _
+ - Replace pluses + with minuses -
+ - Ignore any trailing equal signs =
+ For example, the URLSafe Base64 encoding of: lX1hwfmQ+AK/k/a/BB0y2n///q2+0KfbdA== converts to lX1hwfmQ-AK_k_a_BB0y2n___q2-0KfbdA.
+ required: true
+ schema:
+ type: string
+ example: lX1hwfmQ-AK_k_a_BB0y2n___q2-0KfbdA
+ responses:
+ "204":
+ description: Features updated successfully
+ "400":
+ description: Missing or malformed parameter
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/invalid-page-cursor"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "403":
+ description: Operation forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_403_0"
+ security:
+ - sfsAuthentication: [ ]
+ /api/v1/customer/rooms/{streamId}/activity:
+ put:
+ tags:
+ - CustomerRoom
+ summary: Update room activity
+ operationId: updateRoomActivity
+ description: Update room activity room by stream ID
+ security:
+ - sfsAuthentication: [ ]
+ parameters:
+ - in: path
+ name: streamId
+ description: |
+ Room's streamId.
+ The streamID needs to be URLsafe Base64.
+ To obtain the URLSafe Base64 Conversation ID:
+
+ - Replace forward slashes / with underscores _
+ - Replace pluses + with minuses -
+ - Ignore any trailing equal signs =
+
+ For example, the URLSafe Base64 encoding of: lX1hwfmQ+AK/k/a/BB0y2n///q2+0KfbdA== converts to lX1hwfmQ-AK_k_a_BB0y2n___q2-0KfbdA.
+ schema:
+ type: string
+ required: true
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/room-set-activity-request'
+ responses:
+ '200':
+ description: Room Activity successfully updated
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/room-set-activity-response'
+ '404':
+ description: Room not found
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/room-not-found'
+ '500':
+ description: Update room Status failed
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/update-room-status-failed'
+ '501':
+ description: Reactivation Not Implemented
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/reactivate-room-not-implemented'
+
+ "/api/v1/customer/rooms/members":
+ post:
+ deprecated: true
+ tags:
+ - Room
+ summary: Add room member (deprecated)
+ description: |
+ Add a member to a room:
+
+ - An advisor must be entitled for the relevant external network.
+ - A contact must have already been onboarded.
+
+ operationId: addRoomMemberMultiRoom
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/room-member-request"
+ responses:
+ "200":
+ description: Member successfully added to the room
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/room-member-response"
+ "400":
+ description: Forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_400_3"
+ "403":
+ description: Forbidden
+ content:
+ application/json:
+ schema:
+ oneOf:
+ - $ref: "#/components/schemas/inline_response_403_2"
+ - $ref: "#/components/schemas/inline_response_403_0"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "404":
+ description: Not found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_404_9"
+ "409":
+ description: Conflict
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/member-already-in-room"
+ "500":
+ description: Failed to add member to the room
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/add-room-member-failed"
+ security:
+ - sfsAuthentication: []
+
+ /api/v2/customer/rooms/members:
+ post:
+ tags:
+ - Room
+ summary: Add room members in bulk (recommended)
+ description: |
+ Add multiple advisors and/or contacts to a room.
+ An advisor must be entitled for the relevant external network. A contact must have already been onboarded.
+ operationId: addRoomMembersMultiRoomv2
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/bulk-room-member-multi-room-requestv2"
+ responses:
+ "200":
+ description: Operation to add members to the room completed.
+ Returns an object with the detail of each member's addition success or failure.
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/bulk-room-member-responsev2"
+ "400":
+ description: Missing or malformed parameter
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/rfc-error"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "403":
+ description: Operation forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_403_0"
+ security:
+ - sfsAuthentication: []
+ /api/v1/customer/rooms/members/bulk:
+ post:
+ deprecated: true
+ tags:
+ - Room
+ summary: Add room members in bulk (deprecated)
+ description: |
+ Add multiple members to a room:
+
+ - Advisors must be entitled for the relevant external network.
+ - Contacts must have already been onboarded.
+
+ Returns a report indicating the success or failure for each element of the array.
+ operationId: addRoomMembersMultiRoom
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/bulk-room-member-multi-room-request"
+ responses:
+ "200":
+ description: Operation to add members to the room completed.
+ Returns an object with the detail of each member addition success or failure.
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/bulk-room-member-response"
+ "400":
+ description: Missing or malformed parameter
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/rfc-error"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "403":
+ description: Operation forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_403_0"
+ security:
+ - sfsAuthentication: []
+
+ /api/v1/customer/companies/search:
+ get:
+ tags:
+ - Companies
+ summary: Search for companies
+ description: |
+ Search for companies by name.
+ Note: The WeChat or WhatsApp or SMS or SMS Direct or LINE onboarding applications do not enforce consistency for company names.
+ security:
+ - sfsAuthentication: []
+ operationId: searchCompanies
+ parameters:
+ - name: query
+ in: query
+ description: Start of the company's name to match
+ required: true
+ schema:
+ minLength: 3
+ type: string
+ example: sym
+ responses:
+ "200":
+ description: List of found companies
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/companies-search-response"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "403":
+ description: Operation forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_403_0"
+
+ /api/v1/customer/federationGroups:
+ get:
+ tags:
+ - Federation Group (**NEW**)
+ summary: List all federation groups
+ description: |
+ List all federation groups
+ operationId: listTenantFederationGroups
+ parameters:
+ - in: query
+ name: before
+ schema:
+ type: string
+ description: The before cursor for pagination
+ - in: query
+ name: after
+ schema:
+ type: string
+ description: The after cursor for pagination
+ responses:
+ "200":
+ description: List of federation groups
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/list-federation-groups-response"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/Unauthorized"
+ "403":
+ description: Operation forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/Forbidden"
+ security:
+ - sfsAuthentication: []
+
+ /api/v1/customer/advisors/{advisorSymphonyId}/externalNetwork/{externalNetwork}/federationGroup:
+ put:
+ tags:
+ - Federation Group (**NEW**)
+ summary: Update advisor's federation group for the given external network.
+ description: |
+ Update advisor's federation group for the given external network.
+ operationId: updateAdvisorFederationGroup
+ parameters:
+ - name: externalNetwork
+ in: path
+ required: true
+ description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
+ schema:
+ type: string
+ example: WHATSAPP
+ - name: advisorSymphonyId
+ in: path
+ required: true
+ description: Advisor's Symphony user ID
+ schema:
+ type: string
+ example: 12345678912365
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/update-federation-group-request"
+ responses:
+ "204":
+ description: The advisor's federation group is updated successfully.
+ "400":
+ description: Missing or malformed input
+ content:
+ application/json:
+ schema:
+ oneOf:
+ - $ref: '#/components/schemas/missing-destination-federation-group'
+ - $ref: '#/components/schemas/multiple-destination-federation-group'
+ - $ref: '#/components/schemas/external-network-not-found'
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/Unauthorized"
+ "403":
+ description: Operation forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/federation-group-emp-forbidden"
+ "404":
+ description: Not found
+ content:
+ application/json:
+ schema:
+ oneOf:
+ - $ref: "#/components/schemas/federation-group-not-found"
+ - $ref: "#/components/schemas/advisor-not-found"
+
+ security:
+ - sfsAuthentication: []
+
+ /api/v1/customer/advisors/federationGroup/bulk:
+ post:
+ tags:
+ - Federation Group (**NEW**)
+ summary: Bulk update advisor's federation group
+ description: |
+ Bulk update advisor's federation group.
+ operationId: bulkUpdateAdvisorsFederationGroup
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/bulk-update-federation-group-request"
+ responses:
+ "200":
+ description: The advisor's federation group is updated successfully.
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/bulk-update-federation-group-response"
+ "400":
+ description: Missing or malformed input
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/external-network-not-found"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/Unauthorized"
+ "403":
+ description: Operation forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/Forbidden"
+ "404":
+ description: Not found
+ content:
+ application/json:
+ schema:
+ oneOf:
+ - $ref: '#/components/schemas/advisor-not-found'
+ - $ref: '#/components/schemas/federation-group-not-found'
+ security:
+ - sfsAuthentication: []
+
+ /api/v1/customer/rooms/{streamId}/federationGroup:
+ put:
+ tags:
+ - Federation Group (**NEW**)
+ summary: Set federation group of a room
+ operationId: updateRoomFederationGroups
+ description: Set the federation group of a room.
+ parameters:
+ - in: path
+ name: streamId
+ schema:
+ type: string
+ required: true
+ description: StreamId of the room to transfer
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/room-set-federation-group-request"
+ responses:
+ "204":
+ description: The room's federation group has been updated successfully.
+ "400":
+ description: Missing or malformed input
+ content:
+ application/json:
+ schema:
+ oneOf:
+ - $ref: '#/components/schemas/missing-destination-federation-group'
+ - $ref: '#/components/schemas/multiple-destination-federation-group'
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/Unauthorized"
+ "403":
+ description: Operation forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/federation-group-emp-forbidden"
+ "404":
+ description: Not found
+ content:
+ application/json:
+ schema:
+ oneOf:
+ - $ref: "#/components/schemas/room-not-found"
+ - $ref: "#/components/schemas/federation-group-not-found"
+ "409":
+ description: Conflict
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/room-update-federation-group-errors"
+ security:
+ - sfsAuthentication: []
+
+ /api/v1/customer/contacts/{contactSymphonyId}/advisor/{advisorSymphonyId}/resendInvite:
+ post:
+ tags:
+ - Customer invite
+ summary: Resend a new onboarding invitation to contact
+ operationId: resendInvite
+ description: >
+ Only applicable for networks requiring onboarding invitations: WeChat, LINE.
+ Sends a new onboarding invitation to the contact with the onboarding instructions and a new authentication one-time-password token, if applicable.
+ Required to reset the contact's invitation after it expires. The invitation expiry counter (7 days) is reset to zero and the status is changed from "Expired" to "Pending".
+ LINE since 23.04: If the user enters an expired one-time-password token within the first 7 days they were onboarded, they automatically receive a new valid token.
+ After the 7 days, calling this api is required to reset the user invitation status and to generate a new token.
+ security:
+ - sfsAuthentication: [ ]
+ parameters:
+ - in: path
+ name: contactSymphonyId
+ schema:
+ type: string
+ format: number
+ example: 1234567890
+ required: true
+ description: Contact's Symphony user ID
+ - in: path
+ name: advisorSymphonyId
+ schema:
+ type: string
+ format: number
+ example: 1234567890
+ required: true
+ description: Onboarder's Symphony user ID
+ responses:
+ '200':
+ description: The invite has been resent successfully.
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/resend-invite-response"
+ '400':
+ description: Missing or malformed input
+ content:
+ application/json:
+ schema:
+ oneOf:
+ - $ref: "#/components/schemas/invite-already-confirmed"
+ - $ref: "#/components/schemas/invites-not-configured-on-emp"
+ '404':
+ description: Not found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/contact-not-found"
+ '500':
+ description: Failed
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/resend-invite-failed'
+ /api/v1/customer/tenant/empChannelConnector/{externalNetwork}:
+ get:
+ tags:
+ - CustomerContact
+ summary: List EMP connectors available for one or multiple contacts
+ description: |
+ List the EMP connectors available for one or multiple contacts by Symphony IDs \
+ EMP connector corresponds to \
+ - Official accounts for LINE
+ - Business APIs for WhatsApp
+ - Phone numbers for SMS
+ operationId: listAvailableEmpChannelConnectors
+ parameters:
+ - name: externalNetwork
+ in: path
+ description: "The external network: LINE or WHATSAPP or SMS"
+ required: true
+ schema:
+ minLength: 1
+ type: string
+ example: WHATSAPP
+ - name: symphonyId
+ in: query
+ description: Contacts' Symphony IDs
+ required: false
+ schema:
+ type: array
+ items:
+ type: string
+ pattern: '^\d+$'
+ example: 13606456398824
+ - name: federationGroupId
+ in: query
+ description: Federation group ID
+ required: false
+ schema:
+ type: string
+ example: 83df14d1-9fdb-4cbb-9a9d-718e5e15266a
+ responses:
+ '200':
+ description: EMP connectors found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/list-emp-channel-connector-response"
+ '404':
+ description: Not found
+ content:
+ application/json:
+ schema:
+ oneOf:
+ - $ref: '#/components/schemas/federation-group-not-found'
+ - $ref: '#/components/schemas/tenant-not-found'
+ - $ref: '#/components/schemas/contact-not-found'
+ '403':
+ description: Forbidden
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/federation-group-emp-forbidden'
+ '406':
+ description: Not acceptable
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/not-applicable-for-external-network'
+ security:
+ - sfsAuthentication: [ ]
+ /api/v1/customer/phone-numbers:
+ get:
+ tags:
+ - CustomerPhoneNumber
+ summary: Get phone number details
+ operationId: getPhoneNumbers
+ description: Get phone numbers.
+ security:
+ - sfsAuthentication: [ ]
+ parameters:
+ - in: query
+ name: status
+ schema:
+ type: string
+ description: |
+ filter on the phone number status either
+ - USED
+ - FREE
+ - RELEASED
+ - ON_HOLD
+ - in: query
+ name: provider
+ schema:
+ type: string
+ description: |
+ filter on the provider
+ - UMONY
+ - CUSTOMER_SUPPLIED
+ - in: query
+ name: product
+ schema:
+ type: string
+ description: |
+ filter on the product
+ - VOICE
+ - SMS
+ - PRE_ALLOCATED_NUMBER
+ - PRE_ALLOCATED_FULL
+ - SECOND_NUMBER
+ - SECOND_NUMBER_FULL
+ - in: query
+ name: subNetwork
+ schema:
+ type: string
+ description: |
+ filter on the subnetwork:
+ - SECOND-NUMBER
+ - IN-NETWORK
+ responses:
+ '200':
+ description: Request processed
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/phone-numbers-details-response'
+ /api/v1/customer/phone-number/{phoneNumber}:
+ get:
+ tags:
+ - CustomerNumber
+ summary: Get information on a phone number provided by Symphony
+ operationId: getPhoneNumberInfos
+ description: >
+ Get information on a phone number provided by Symphony
+ security:
+ - sfsAuthentication: [ ]
+ parameters:
+ - in: path
+ name: phoneNumber
+ schema:
+ type: string
+ format: phone
+ required: true
+ description: Phone number provided by Symphony
+ responses:
+ '200':
+ description: Found phone number provided by Symphony
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/number-response'
+ '404':
+ description: Phone number not found
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/number-not-found'
+ put:
+ tags:
+ - CustomerNumber
+ summary: Update a phone number
+ operationId: updatePhoneNumber
+ description: |
+ This endpoint allows to update an existing phone number.
+
+ Currently, the following operations are supported:
+ - Unassign a phone number from an advisor (making it "on hold").
+ - Assign a phone number to a new advisor.
+ security:
+ - sfsAuthentication: [ ]
+ parameters:
+ - in: path
+ name: phoneNumber
+ schema:
+ type: string
+ format: phone
+ required: true
+ description: The phone number to update.
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/update-number-request'
+ responses:
+ '200':
+ description: The phone number was successfully updated.
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/number-response'
+ '400':
+ description: |
+ The advisor that the phone number is being associated to does not exist.
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/symphony-user-not-found-problem'
+ '403':
+ description: |
+ It is forbidden to update this phone number. This may happen if:
+ - The advisor associated with the phone number is still entitled to a direct EMP,
+ - The advisor that the phone number is being associated to is already entitled to a direct EMP with another
+ phone number.
+ content:
+ application/json:
+ schema:
+ oneOf:
+ - $ref: '#/components/schemas/advisor-still-entitled'
+ - $ref: '#/components/schemas/advisor-already-entitled-for-direct-emp'
+ '404':
+ description: |
+ May happen if the phone number to update was not found.
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/number-not-found'
+
+ /api/v1/customer/phone-number/{phoneNumber}/address:
+ get:
+ tags:
+ - CustomerNumber
+ summary: Get phone address
+ operationId: getPhoneAddress
+ description: >
+ Get phone address
+ security:
+ - sfsAuthentication: [ ]
+ parameters:
+ - in: path
+ name: phoneNumber
+ schema:
+ type: string
+ format: phone
+ required: true
+ description: Phone number
+ responses:
+ '200':
+ description: Found phone address
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/address-response'
+ '404':
+ description: Phone number not found
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/number-not-found'
+ put:
+ tags:
+ - CustomerNumber
+ summary: Update phone number's address
+ operationId: updatePhoneAddress
+ description: >
+ Update phone number's address
+ security:
+ - sfsAuthentication: [ ]
+ parameters:
+ - in: path
+ name: phoneNumber
+ schema:
+ type: string
+ format: phone
+ required: true
+ description: Phone number
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/address-request'
+ responses:
+ '204':
+ description: The phone number's address has been successfully updated
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/address-response'
+ '400':
+ description: Nothing to update
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/no-field-updated'
+ '404':
+ description: Phone number not found
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/number-not-found'
+ delete:
+ tags:
+ - CustomerNumber
+ summary: Remove phone number's address
+ operationId: removePhoneAddress
+ description: >
+ Remove phone number's address
+ security:
+ - sfsAuthentication: [ ]
+ parameters:
+ - in: path
+ name: phoneNumber
+ schema:
+ type: string
+ format: phone
+ required: true
+ description: Phone number
+ responses:
+ '204':
+ description: The phone number's address has been successfully removed
+ '404':
+ description: Phone number not found
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/number-not-found'
+
+ /api/v1/customer/advisors/{advisorSymphonyId}/phone-number:
+ get:
+ tags:
+ - CustomerNumber
+ summary: Get Advisor phone number details
+ operationId: getAdvisorPhoneNumbers
+ description: Get Advisor phone number details.
+ security:
+ - sfsAuthentication: [ ]
+ parameters:
+ - in: path
+ name: advisorSymphonyId
+ description: Advisor's symphony ID
+ required: true
+ schema:
+ type: string
+ pattern: '^\d+$'
+ responses:
+ '200':
+ description: Request processed
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/phone-number-info'
+ '404':
+ description: |
+ This may happen if:
+ - The advisor does not have any phone number associated.
+ - The requested advisor is not found.
+ content:
+ application/json:
+ schema:
+ oneOf:
+ - $ref: '#/components/schemas/phone-number-not-assigned'
+ - $ref: '#/components/schemas/advisor-not-found'
+
+components:
+ schemas:
+ phone-number-info:
+ type: object
+ properties:
+ phoneNumber:
+ type: string
+ example: 911234567890
+ subNetwork:
+ type: string
+ description: |
+ sub network of the phone, either:
+ - SECOND-NUMBER
+ - IN-NETWORK
+ country:
+ type: string
+ carrier:
+ type: string
+ status:
+ type: string
+ description: |
+ Phone number status
+ - USED
+ - FREE
+ - RELEASED
+ - ON_HOLD
+ productCode:
+ type: integer
+ product:
+ type: string
+ description: |
+ For fully ported or partially ported numbers
+ - PRE_ALLOCATED_NUMBER
+ - PRE_ALLOCATED_FULL
+ - SECOND_NUMBER
+ - SECOND_NUMBER_FULL
+ - VOICE (For In-Network numbers only)
+ - SMS (For In-Network numbers only)
+ provider:
+ type: string
+ enum:
+ - UMONY
+ - CUSTOMER_SUPPLIED
+ assignedTo:
+ $ref: '#/components/schemas/assigned-to'
+ externalNetworks:
+ type: array
+ items:
+ $ref: '#/components/schemas/external-network'
+ assigned-to:
+ type: object
+ properties:
+ advisorSymphonyId:
+ type: string
+ example: 911234567890
+ advisorFirstName:
+ type: string
+ advisorLastName:
+ type: string
+ external-network:
+ type: object
+ properties:
+ externalNetwork:
+ type: string
+ example: WHATSAPP-DIRECT
+ availability:
+ type: string
+ empStatus:
+ type: string
+ enum:
+ - CONNECTED
+ - DISCONNECTED
+ - PENDING
+ - UNKNOWN
+ phone-number-not-assigned:
+ type: object
+ description: 'The specified advisor does not have a phone number assigned'
+ properties:
+ type:
+ type: string
+ format: 'phone.number.not.assigned'
+ title:
+ type: string
+ format: 'The specified advisor does not have a phone number assigned'
+ status:
+ type: integer
+ format: "404"
+ entitlements-response:
+ type: object
+ properties:
+ entitlements:
+ example:
+ - WECHAT
+ - WHATSAPP
+ - SMS
+ - SMS-DIRECT
+ - LINE
+ entitled-response:
+ type: object
+ properties:
+ entitlements:
+ type: array
+ items:
+ $ref: "#/components/schemas/entitlement-response"
+ pagination:
+ $ref: "#/components/schemas/pagination"
+ search-contact-response:
+ type: object
+ properties:
+ firstName:
+ type: string
+ example: John
+ lastName:
+ type: string
+ example: Doe
+ companyName:
+ type: string
+ example: Company
+ emailAddress:
+ type: string
+ example: johndoe@symphony.com
+ phoneNumber:
+ type: string
+ example: 911234567890
+ externalNetwork:
+ type: string
+ description: "External network : WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
+ example: WHATSAPP
+ symphonyId:
+ type: string
+ example: 12345678912365
+ status:
+ $ref: '#/components/schemas/contact-status'
+ statusUpdateDate:
+ type: string
+ format: date-time
+ example: 1547661232368
+ ownAdvisorId:
+ type: string
+ example: 12345678912300
+ preferredLanguage:
+ type: string
+ example: English
+ invitationCode:
+ type: string
+ example: AB12DE43
+ room: # Room is null if the emp is not 1:1 only
+ $ref: '#/components/schemas/room-creation-response'
+ isColleague:
+ type: boolean
+ default: false
+ example: false
+ consent:
+ type: string
+ enum:
+ - OPTED_IN
+ - OPTED_OUT
+ - PENDING
+ example: PENDING
+ phoneNumberBlockedBy:
+ type: array
+ items:
+ $ref: '#/components/schemas/blocked-by-item'
+
+ entitlement-response:
+ type: object
+ properties:
+ symphonyId:
+ type: string
+ example: "14362370637825"
+ firstName:
+ type: string
+ example: William
+ lastName:
+ type: string
+ example: Smith
+ companyName:
+ type: string
+ example: Company
+ displayName:
+ type: string
+ example: William Smith
+ emailAddress:
+ type: string
+ example: william.smith@symphony.com
+ avatar:
+ type: string
+ example: "https://YOURDOMAIN.symphony.com/avatars/3gXMhglCCTwLPL9JAprnyHzYn5-PR49-wYDG814n1g8.png"
+ externalNetwork:
+ type: string
+ example: WHATSAPP_DIRECT
+ federationGroupId:
+ type: string
+ example: federationGroupId
+ status:
+ type: string
+ example: PRE_ENTITLED
+ phone:
+ $ref: "#/components/schemas/phone"
+ permissions:
+ type: array
+ items:
+ $ref: '#/components/schemas/permission-response'
+ phone:
+ type: object
+ description: "Phone number (direct EMP case)"
+ properties:
+ number:
+ type: string
+ example: "+1 234-567-8912"
+ product:
+ type: string
+ example: "PRE_ALLOCATED_HOSTED"
+ subNetwork:
+ type: string
+ description: "Sub-network: IN-NETWORK or SECOND-NUMBER"
+ example: "SECOND-NUMBER"
+ provider:
+ type: string
+ enum:
+ - UMONY
+ - CUSTOMER_SUPPLIED
+ list-emp-channel-connector-response:
+ type: object
+ properties:
+ empChannelConnectors:
+ type: array
+ items:
+ $ref: '#/components/schemas/emp-channel-connector-response'
+ emp-channel-connector-response:
+ allOf:
+ - $ref: "#/components/schemas/emp-channel-connector"
+ - type: object
+ properties:
+ available:
+ type: boolean
+ emp-channel-connector:
+ type: object
+ properties:
+ displayName:
+ type: string
+ example: Official Account Name
+ id:
+ type: string
+ example: 123456
+ add-entitlementv2-response:
+ type: object
+ properties:
+ symphonyId:
+ type: string
+ example: 14362370637825
+ firstName:
+ type: string
+ example: William
+ lastName:
+ type: string
+ example: Smith
+ companyName:
+ type: string
+ example: Company
+ displayName:
+ type: string
+ example: William Smith
+ emailAddress:
+ type: string
+ example: william.smith@symphony.com
+ avatar:
+ type: string
+ example: "https://YOURDOMAIN.symphony.com/avatars/3gXMhglCCTwLPL9JAprnyHzYn5-PR49-wYDG814n1g8.png"
+ externalNetwork:
+ type: string
+ example: WHATSAPP
+ permissions:
+ type: array
+ items:
+ $ref: "#/components/schemas/bulk-permission-item"
+ federationGroupId:
+ type: string
+ example: federationGroupId
+ ownContactId:
+ type: string
+ example: 14362370637825
+ status:
+ type: string
+ enum:
+ - PRE_ENTITLED
+ - ENTITLED
+ phone:
+ $ref: "#/components/schemas/phone"
+ invalid-page-cursor:
+ type: object
+ properties:
+ type:
+ type: string
+ format: invalid.page.cursor
+ title:
+ type: string
+ format: The provided cursor key is invalid or expired.
+ status:
+ type: integer
+ format: "400"
+ description: The provided cursor key is invalid or expired
+ entitlement-request:
+ required:
+ - externalNetwork
+ type: object
+ properties:
+ advisorEmailAddress:
+ type: string
+ example: william.smith@symphony.com
+ externalNetwork:
+ description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
+ type: string
+ example: WHATSAPP
+ symphonyId:
+ type: string
+ example: 12345678912365
+ advisorPhoneNumber:
+ description: "Required for the advisor to access SMS Direct In-Network and supported for SMS Direct Second-Number. Supported for the advisor to access WhatsApp Direct. However, note that the advisor’s phone number is not applicable for onboarding the advisor to other external networks (WeChat, WhatsApp, SMS or LINE)."
+ type: string
+ format: phone
+ permissions:
+ type: array
+ items:
+ type: string
+ federationGroupId:
+ type: string
+ example: federationGroupId
+ pre-entitlement-request:
+ type: object
+ required:
+ - advisorPhoneNumber
+ properties:
+ advisorPhoneNumber:
+ type: string
+ format: phone
+ federationGroupId:
+ type: string
+ entitlement-user-already-exists-problem:
+ type: object
+ properties:
+ type:
+ type: string
+ format: entitlement.already.exists
+ title:
+ type: string
+ format: Entitlement already exists.
+ status:
+ type: integer
+ format: "400"
+ description: Entitlement already exists.
+ advisor-phone-number-not-supported-problem:
+ type: object
+ properties:
+ type:
+ type: string
+ format: advisor.phone.number.not.supported
+ title:
+ type: string
+ format: Advisor's phone number not supported.
+ status:
+ type: integer
+ format: "400"
+ description: Advisor's phone number is not supported for this external network.
+ advisor-phone-number-is-required-problem:
+ type: object
+ properties:
+ type:
+ type: string
+ format: advisor.phone.number.is.required
+ title:
+ type: string
+ format: Advisor's phone number is required.
+ status:
+ type: integer
+ format: "400"
+ description: Advisor's phone number is required for this external network.
+ advisor-phone-number-already-used-problem:
+ type: object
+ properties:
+ type:
+ type: string
+ format: advisor.phone.number.already.used
+ title:
+ type: string
+ format: Advisor's phone number already used.
+ status:
+ type: integer
+ format: "409"
+ description: Advisor's phone number is already used.
+ pre-entitlement-permissions-not-supported-problem:
+ type: object
+ properties:
+ type:
+ type: string
+ format: 'pre.entitlement.permissions.not.supported'
+ title:
+ type: string
+ format: 'Permissions are not supported for pre-entitlements.'
+ status:
+ type: integer
+ format: "400"
+ contact-status:
+ type: string
+ enum:
+ - PENDING_CONFIRMATION
+ - CONFIRMED
+ - INVITE_EXPIRED
+ - UNAVAILABLE
+ - INCOMPLETE
+ - OPTED_IN
+ - OPTED_OUT
+ symphony-user-not-found-problem:
+ type: object
+ properties:
+ type:
+ type: string
+ format: symphony.user.not.found
+ title:
+ type: string
+ format: Symphony user not found.
+ status:
+ type: integer
+ format: "400"
+ description: Symphony user not found.
+ entitlement-type-not-found-problem:
+ type: object
+ properties:
+ type:
+ type: string
+ format: entitlement.type.not.found
+ title:
+ type: string
+ format: Entitlement type not found.
+ status:
+ type: integer
+ format: "400"
+ description: Entitlement type not found
+ forbidden-entitlement-type:
+ type: object
+ properties:
+ type:
+ type: string
+ format: forbidden.entitlement.type
+ title:
+ type: string
+ format: Forbidden entitlement.type.
+ status:
+ type: integer
+ format: "403"
+ description: Forbidden entitlement type.
+ pre-entitlement-phone-number-mismatch:
+ description: The phone number of the pre-entitlement does not match.
+ properties:
+ type:
+ type: string
+ format: pre.entitlement.phone.number.mismatch
+ title:
+ type: string
+ format: The phone number of the pre-entitlement does not match.
+ status:
+ type: integer
+ format: "409"
+ number-not-available:
+ type: object
+ description: Number not available
+ properties:
+ type:
+ type: string
+ format: number.not.available
+ title:
+ type: string
+ format: Number not available
+ status:
+ type: integer
+ format: "409"
+ number-registration-not-possible:
+ type: object
+ description: Number registration is not possible
+ properties:
+ type:
+ type: string
+ format: number.registration.not.possible
+ title:
+ type: string
+ format: Number registration not possible
+ detailMessage:
+ type: string
+ format: Detail message
+ status:
+ type: integer
+ format: "409"
+ tenant-configuration-not-found:
+ type: object
+ properties:
+ type:
+ type: string
+ format: tenant.configuration.not.found
+ title:
+ type: string
+ format: Tenant configuration not found.
+ status:
+ type: integer
+ format: "404"
+ description: Tenant configuration not found.
+ entitlement-not-found-problem:
+ type: object
+ properties:
+ type:
+ type: string
+ format: entitlement.not.found
+ title:
+ type: string
+ format: Entitlement not found.
+ status:
+ type: integer
+ format: "404"
+ description: Entitlement not found.
+ contact-not-found:
+ type: object
+ properties:
+ type:
+ type: string
+ format: contact.not.found
+ title:
+ type: string
+ format: Contact not found
+ status:
+ type: integer
+ format: "404"
+ description: Contact not found
+ company-not-found:
+ type: object
+ properties:
+ type:
+ type: string
+ format: company.not.found
+ title:
+ type: string
+ format: Company not found
+ status:
+ type: integer
+ format: "404"
+ description: Company not found
+ no-available-number:
+ type: object
+ properties:
+ type:
+ type: string
+ format: no.available.number
+ title:
+ type: string
+ format: No available number.
+ status:
+ type: integer
+ format: "500"
+ description: No available number.
+ incompatible-external-network-and-request-body:
+ type: object
+ description: 'Incompatible external network and request body.'
+ properties:
+ type:
+ type: string
+ format: 'incompatible.external.network.request.body'
+ title:
+ type: string
+ format: 'Incompatible external network and request body.'
+ status:
+ type: integer
+ format: "400"
+ user-id-mismatch:
+ type: object
+ description: 'The token userId does not match the request.'
+ properties:
+ type:
+ type: string
+ format: 'user.id.mismatch'
+ title:
+ type: string
+ format: 'The token userId does not match the request.'
+ status:
+ type: integer
+ format: "403"
+ phone-international-onboarding-forbidden:
+ type: object
+ description: 'Forbidden international onboarding.'
+ properties:
+ type:
+ type: string
+ format: 'phone.international.onboarding.forbidden'
+ title:
+ type: string
+ format: 'Forbidden international onboarding.'
+ status:
+ type: integer
+ format: "403"
+ deleteContacts-response:
+ type: object
+ properties:
+ report:
+ type: array
+ items:
+ $ref: "#/components/schemas/deleteContact-response"
+ deleteContact-response:
+ type: object
+ properties:
+ contact:
+ $ref: "#/components/schemas/deleteContact-request"
+ status:
+ $ref: "#/components/schemas/bulk-removal-status"
+ deleteContact-request:
+ required:
+ - advisorEmailAddress
+ - externalNetwork
+ - contactEmailAddress
+ type: object
+ properties:
+ advisorEmailAddress:
+ type: string
+ example: william.smith@symphony.com
+ contactEmailAddress:
+ type: string
+ format: email
+ example: johndoe@symphony.com
+ externalNetwork:
+ description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
+ type: string
+ example: WHATSAPP
+ customer-deleteAdvisorContacts-responsev2:
+ type: object
+ properties:
+ report:
+ type: array
+ items:
+ $ref: '#/components/schemas/customer-deleteAdvisorContact-responsev2'
+ customer-deleteAdvisorContact-responsev2:
+ type: object
+ properties:
+ contact:
+ $ref: '#/components/schemas/customer-deleteAdvisorContact-contact'
+ status:
+ $ref: '#/components/schemas/bulk-removal-status'
+ customer-deleteAdvisorContact-contact:
+ required:
+ - advisorSymphonyId
+ - phoneNumber
+ - externalNetwork
+ type: object
+ properties:
+ advisorSymphonyId:
+ type: string
+ example: 1234567890
+ phoneNumber:
+ type: string
+ example: +1 234567890
+ externalNetwork:
+ type: string
+ example: WHATSAPP
+ deleteContacts-request:
+ type: object
+ properties:
+ contacts:
+ type: array
+ items:
+ $ref: "#/components/schemas/deleteContact-request"
+ customer-contactWithId-response:
+ type: object
+ properties:
+ contact:
+ $ref: "#/components/schemas/customer-contactWithId"
+ status:
+ $ref: "#/components/schemas/bulk-removal-status"
+ customer-contactsWithId-response:
+ type: object
+ properties:
+ report:
+ type: array
+ items:
+ $ref: "#/components/schemas/customer-contactWithId-response"
+ customer-contactWithId:
+ type: object
+ properties:
+ advisorSymphonyId:
+ type: string
+ advisorEmailAddress:
+ type: string
+ contactEmailAddress:
+ type: string
+ externalNetwork:
+ type: string
+ deleteContacts-responsev2:
+ type: object
+ properties:
+ report:
+ type: array
+ items:
+ $ref: "#/components/schemas/deleteContact-responsev2"
+ deleteContact-responsev2:
+ type: object
+ properties:
+ contact:
+ $ref: "#/components/schemas/deleteContact-requestv2"
+ status:
+ $ref: "#/components/schemas/bulk-removal-statusv2"
+ deleteContact-requestv2:
+ required:
+ - advisorSymphonyId
+ - contactSymphonyId
+ type: object
+ properties:
+ advisorSymphonyId:
+ type: string
+ example: 1234567890
+ contactSymphonyId:
+ type: string
+ format: number
+ example: 1234567890
+ deleteContacts-requestv2:
+ type: object
+ properties:
+ contacts:
+ type: array
+ items:
+ $ref: "#/components/schemas/deleteContact-requestv2"
+ customer-contactWithId-responsev2:
+ type: object
+ properties:
+ contact:
+ $ref: "#/components/schemas/customer-contactWithIdv2"
+ status:
+ $ref: "#/components/schemas/bulk-removal-status"
+ customer-contactsWithId-responsev2:
+ type: object
+ properties:
+ report:
+ type: array
+ items:
+ $ref: "#/components/schemas/customer-contactWithId-responsev2"
+ customer-contactWithIdv2:
+ type: object
+ properties:
+ advisorSymphonyId:
+ type: string
+
+ advisor-not-found:
+ type: object
+ properties:
+ type:
+ type: string
+ example: advisor.not.found
+ title:
+ type: string
+ example: advisor not found
+ status:
+ type: integer
+ example: 404
+ description: Advisor not found
+ advisor-id-not-provided:
+ description: 'Advisor ID or email not provided'
+ properties:
+ type:
+ type: string
+ format: 'advisor.identifier.not.provided'
+ title:
+ type: string
+ format: 'Advisor ID or email not provided.'
+ status:
+ type: integer
+ example: 400
+ not-a-room-member:
+ type: object
+ description: 'Not a room member.'
+ properties:
+ type:
+ type: string
+ format: 'not.a.room.member'
+ title:
+ type: string
+ format: 'Not a room member.'
+ status:
+ type: integer
+ example: 409
+
+ already-room-owner:
+ type: object
+ description: 'Advisor already room owner.'
+ properties:
+ type:
+ type: string
+ format: 'advisor.already.room.owner'
+ title:
+ type: string
+ format: 'Advisor already room owner.'
+ status:
+ type: integer
+ example: 409
+
+ cannot-transfer-room-ownership-duplicate-room-name:
+ type: object
+ description: 'Cannot transfer room ownership because the advisor is already owner of a room with the same name'
+ properties:
+ type:
+ type: string
+ format: 'cannot.transfer.room.ownership.duplicate.room.name'
+ title:
+ type: string
+ format: 'Cannot transfer room ownership because the advisor is already owner of a room with the same name'
+ status:
+ type: integer
+ example: 409
+
+ room-is-deactivated:
+ type: object
+ description: The Room is Deactivated.
+ properties:
+ type:
+ type: string
+ format: room.is.deactivated
+ title:
+ type: string
+ format: The Room is Deactivated.
+ status:
+ type: integer
+ example: 409
+ roomName:
+ type: string
+ nullable: true
+ format: name of the deactivated room
+ Unauthorized:
+ type: object
+ properties:
+ type:
+ type: string
+ example: unauthorized
+ title:
+ type: string
+ example: Unauthorized
+ status:
+ type: integer
+ example: 401
+ description: Full authentication is required to access this resource
+ Forbidden:
+ type: object
+ properties:
+ type:
+ type: string
+ example: Forbidden
+ title:
+ type: string
+ example: Forbidden
+ status:
+ type: integer
+ example: 403
+ description: Access is denied, you don't have the permission to perform this operation
+ permissions-response:
+ type: object
+ properties:
+ permissions:
+ type: array
+ items:
+ $ref: "#/components/schemas/list-permission-response"
+ enhanced-permissions-response:
+ type: object
+ properties:
+ permissions:
+ type: array
+ items:
+ $ref: "#/components/schemas/enhanced-permission-response"
+ enhanced-permission-response:
+ type: object
+ properties:
+ isDefault:
+ type: boolean
+ permissionId:
+ type: string
+ permissionName:
+ type: string
+ bulk-permission-item:
+ type: object
+ properties:
+ status:
+ type: integer
+ example: 200
+ response:
+ $ref: "#/components/schemas/permission-response"
+ error:
+ $ref: "#/components/schemas/bulk-item-error"
+ list-permission-response:
+ type: string
+ example: "create:room"
+ permission-response:
+ type: object
+ properties:
+ permissionName:
+ type: string
+ example: "create:room"
+ permissionId:
+ type: string
+ example: "aef488fa-636e-483e-b366-278e07354e57"
+ advisor-permissions-response:
+ type: object
+ properties:
+ advisorSymphonyId:
+ type: string
+ example: 14362370637825
+ externalNetwork:
+ description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
+ type: string
+ example: WHATSAPP
+ permissions:
+ type: array
+ items:
+ $ref: "#/components/schemas/permission-response"
+ advisors-permission-requestv2:
+ required:
+ - advisorSymphonyIds
+ - externalNetwork
+ - permissionName
+ type: object
+ properties:
+ advisorSymphonyIds:
+ type: array
+ items:
+ type: string
+ example: 1234567890
+ externalNetwork:
+ description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
+ type: string
+ example: WHATSAPP
+ permissionName:
+ type: string
+ example: "create:room"
+ advisors-permission-request:
+ required:
+ - advisorEmailAddress
+ - externalNetwork
+ - permissionName
+ type: object
+ properties:
+ advisorEmailAddress:
+ type: array
+ items:
+ type: string
+ example: william.smith@symphony.com
+ externalNetwork:
+ description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
+ type: string
+ example: WHATSAPP
+ permissionName:
+ type: string
+ example: "create:room"
+ advisor-permission-request:
+ required:
+ - permissionName
+ type: object
+ properties:
+ permissionName:
+ type: string
+ example: "create:room"
+ advisor-permission-response:
+ type: object
+ properties:
+ advisorSymphonyId:
+ type: string
+ example: 14362370637825
+ externalNetwork:
+ description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
+ type: string
+ example: WHATSAPP
+ permission:
+ $ref: "#/components/schemas/permission-response"
+ permission-not-found:
+ type: object
+ properties:
+ type:
+ type: string
+ format: permission.not.found
+ title:
+ type: string
+ format: Permission not found.
+ status:
+ type: integer
+ format: "404"
+ description: Permission not found.
+ permission-already-assigned:
+ type: object
+ properties:
+ type:
+ type: string
+ format: permission.already.assigned
+ example: permission.already.assigned
+ title:
+ type: string
+ format: Permission already assigned.
+ example: Permission already assigned.
+ status:
+ type: integer
+ format: "409"
+ example: 409
+ description: Permission already assigned.
+ missing-destination-federation-group:
+ type: object
+ properties:
+ type:
+ type: string
+ format: missing.destination.federation.group
+ title:
+ type: string
+ format: Missing destination federation group
+ status:
+ type: integer
+ format: "400"
+ multiple-destination-federation-group:
+ type: object
+ properties:
+ type:
+ type: string
+ format: multiple.destination.federation.group
+ title:
+ type: string
+ format: Multiple destination federation group
+ status:
+ type: integer
+ format: "400"
+ bulk-advisor-permission-response:
+ type: object
+ properties:
+ advisorsPermissions:
+ type: array
+ items:
+ $ref: "#/components/schemas/bulk-advisor-permission-item-response"
+ bulk-advisor-permission-item-response:
+ type: object
+ properties:
+ status:
+ type: integer
+ response:
+ $ref: "#/components/schemas/advisor-permission-response"
+ error:
+ $ref: "#/components/schemas/bulk-item-error"
+ multiple-advisor-permission-response:
+ type: object
+ properties:
+ advisorsPermissions:
+ type: array
+ items:
+ type: object
+ properties:
+ status:
+ type: integer
+ example: 200
+ response:
+ type: object
+ properties:
+ advisorSymphonyId:
+ type: string
+ description: Symphony user ID of the advisor
+ example: "12345678912365"
+ email:
+ type: string
+ description: email adress of the advisor
+ example: "william.smith@symphony.com"
+ externalNetwork:
+ description: WHATSAPP
+ type: string
+ example: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
+ permission:
+ type: object
+ properties:
+ permissionName:
+ type: string
+ example: "create:room"
+ error:
+ type: object
+ description: Should an error occur while adding or removing the permission, this returned object will provide details about the error(s)
+ properties:
+ title:
+ type: string
+ example: advisor.not.found
+ detail:
+ type: string
+ example: "Advisor 68719476737 does not exist"
+ customer-contact-request:
+ allOf:
+ - $ref: "#/components/schemas/contact-request"
+ - required:
+ - onboarderEmailAddress
+ type: object
+ properties:
+ advisorEmailAddresses:
+ type: array
+ description: A list of email addresses of the advisor to whom the contact is to be added. For WeChat, an "onboarder" is an advisor with the permission "create:contact". For WhatsApp, SMS, SMS Direct and LINE, the permission is set by default.
+ items:
+ type: string
+ format: email
+ example: william.smith@symphony.com
+ onboarderEmailAddress:
+ type: string
+ example: william.smith@symphony.com
+ description: If both advisorSymphonyIds and advisorEmailAddresses are empty, the contact will be added to the onboarder with this email address.
+ createRoom:
+ type: boolean
+ description: Can be set to false in order to prevent the room creation when onboarding a contact on SMS Direct or WhatsApp Direct. This parameter can't be set to true for WhatsApp, SMS, Wechat and LINE for now.
+ add-contact-response:
+ type: object
+ properties:
+ firstName:
+ type: string
+ example: John
+ lastName:
+ type: string
+ example: Doe
+ companyName:
+ type: string
+ example: Company
+ emailAddress:
+ type: string
+ example: johndoe@symphony.com
+ phoneNumber:
+ type: string
+ example: 911234567890
+ externalNetwork:
+ description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
+ type: string
+ example: WHATSAPP
+ symphonyId:
+ type: string
+ example: 12345678912365
+ status:
+ type: string
+ enum:
+ - PENDING_CONFIRMATION
+ - CONFIRMED
+ - INVITE_EXPIRED
+ - CANCELED
+ - UNAVAILABLE
+ - INCOMPLETE
+ statusUpdateDate:
+ type: string
+ format: date-time
+ example: 1547661232368
+ preferredLanguage:
+ type: string
+ example: CHINESE_CHN, CHINESE_HKG, CHINESE_TAI, JAPANESE (among others, see release note for more)
+ invitationCode:
+ type: string
+ example: "AB12DE43"
+ phoneNumberBlockedBy:
+ type: array
+ items:
+ $ref: '#/components/schemas/blocked-by-item'
+ list-contact-response:
+ type: object
+ properties:
+ contacts:
+ type: array
+ items:
+ $ref: "#/components/schemas/find-contact-response-v2-with-block-status"
+ pagination:
+ $ref: "#/components/schemas/pagination"
+ find-contact-response:
+ type: object
+ properties:
+ firstName:
+ type: string
+ example: John
+ lastName:
+ type: string
+ example: Doe
+ companyName:
+ type: string
+ example: Company
+ emailAddress:
+ type: string
+ example: johndoe@symphony.com
+ phoneNumber:
+ type: string
+ example: 911234567890
+ externalNetwork:
+ description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
+ type: string
+ example: WHATSAPP
+ symphonyId:
+ type: string
+ example: 12345678912365
+ advisors:
+ type: array
+ description: Advisors Symphony IDs
+ items:
+ type: string
+ example: [123456789, 369258147, 7896564123]
+ status:
+ type: string
+ enum: [PENDING_CONFIRMATION, CONFIRMED, INVITE_EXPIRED, CANCELED, UNAVAILABLE, INCOMPLETE]
+ isColleague:
+ type: boolean
+ default: false
+ find-contact-response-v2-with-block-status: #Not added yet in "Get contact by phone number"
+ allOf:
+ - $ref: "#/components/schemas/find-contact-response-v2"
+ - $ref: '#/components/schemas/blocked-by-item'
+ find-contact-response-v2:
+ allOf:
+ - $ref: "#/components/schemas/find-contact-response"
+ - type: object
+ properties:
+ preferredLanguage:
+ type: string
+ example: CHINESE_CHN, CHINESE_HKG, CHINESE_TAI, JAPANESE (among others, see release note for more)
+ blocked-by-item:
+ type: object
+ properties:
+ advisorSymphonyId:
+ type: string
+ format: phone
+ reason:
+ $ref: '#/components/schemas/blocking-reason-enum'
+ comment:
+ type: string
+ requestDate:
+ type: string
+ format: date-time
+
+ external-network-not-found:
+ type: object
+ properties:
+ type:
+ type: string
+ format: external.network.not.found
+ example: Bad request
+ title:
+ type: string
+ format: External network not found.
+ example: Bad request
+ status:
+ type: integer
+ format: "400"
+ example: 400
+ description: External network not found.
+ invalid-user-info:
+ type: object
+ properties:
+ type:
+ type: string
+ format: invalid.user.information
+ title:
+ type: string
+ format: Invalid user information
+ status:
+ type: integer
+ format: "400"
+ example: 400
+ description: Invalid user information
+ rename-room-forbidden:
+ type: object
+ description: 'Rename room forbidden'
+ properties:
+ type:
+ type: string
+ format: 'rename.room.forbidden'
+ title:
+ type: string
+ format: 'Not allowed to rename the room.'
+ status:
+ type: integer
+ format: "403"
+ different-room-name-required:
+ type: object
+ description: 'Different room name is required.'
+ properties:
+ type:
+ type: string
+ format: 'different.room.name.required'
+ title:
+ type: string
+ format: 'Different room name is required.'
+ status:
+ type: integer
+ format: "409"
+ cannot-rename-room-duplicate-room-name:
+ type: object
+ description: 'Cannot rename room because the owner already has a room with the same name.'
+ properties:
+ type:
+ type: string
+ format: 'cannot.rename.room.duplicate.room.name'
+ title:
+ type: string
+ format: 'Cannot rename room because the owner already has a room with the same name.'
+ status:
+ type: integer
+ format: "409"
+ rename-room-failed:
+ type: object
+ description: 'Failed to rename the room.'
+ properties:
+ type:
+ type: string
+ format: 'rename.room.failed'
+ title:
+ type: string
+ format: 'Unable to rename the room.'
+ status:
+ type: integer
+ format: "500"
+ forbidden-advisor:
+ type: object
+ properties:
+ type:
+ type: string
+ format: onboarding.forbidden.advisor
+ title:
+ type: string
+ format: This Advisor is not permissioned for Onboarding.
+ status:
+ type: integer
+ format: "403"
+ description: This Advisor is not permissioned for Onboarding.
+ forbidden-onboarder:
+ type: object
+ properties:
+ type:
+ type: string
+ format: onboarding.forbidden.onboarder
+ title:
+ type: string
+ format: This Onboarder is not entitled for this external network.
+ #find where to define "onboarder" = Advisor with onboarding permission. Need to modify API code to change this message
+ status:
+ type: integer
+ format: "403"
+ description: This Onboarder is not entitled for this external network.
+ #find where to define "onboarder" = Advisor with onboarding permission. Need to modify API code to change this message
+ user-already-onboarded:
+ type: object
+ properties:
+ type:
+ type: string
+ format: user.already.onboarded
+ title:
+ type: string
+ format: Contact already onboarded.
+ status:
+ type: integer
+ format: "409"
+ description: Contact already onboarded.
+ user-already-exists:
+ type: object
+ properties:
+ type:
+ type: string
+ format: user.already.exists
+ title:
+ type: string
+ format: Contact already exists.
+ status:
+ type: integer
+ format: "409"
+ description: Contact already exists.
+ create-account-failed:
+ type: object
+ properties:
+ type:
+ type: string
+ format: account.creation.failed
+ title:
+ type: string
+ format: Unable to create the account.
+ status:
+ type: integer
+ format: "500"
+ description: Gateway microservice cannot create the Symphony account.
+ customer-update-contacts-requestv2:
+ required:
+ - firstName
+ - lastName
+ - companyName
+ - phoneNumber
+ - advisorSymphonyId
+ type: object
+ properties:
+ firstName:
+ type: string
+ example: John
+ lastName:
+ type: string
+ example: DoeABC
+ companyName:
+ type: string
+ example: Company
+ maxLength: 100
+ phoneNumber:
+ type: string
+ format: phone
+ example: 911234567890
+ emailAddress:
+ type: string
+ example: johndoe@symphony.com
+ advisorSymphonyId:
+ type: string
+ pattern: '^\d+$'
+ example: 1234567890
+ preferredLanguage:
+ type: string
+ description: Contact preferred language. Refer to contact preferred language section at the beginning of this documentation for valid language name.
+ example: CHINESE_CHN, CHINESE_HKG, CHINESE_TAI, JAPANESE, etc.
+ customer-update-contacts-request:
+ allOf:
+ - $ref: "#/components/schemas/update-contacts-request"
+ - required:
+ - advisorEmailAddress
+ type: object
+ properties:
+ advisorEmailAddress:
+ type: string
+ format: email
+ example: william.smith@symphony.com
+ update-contacts-response:
+ type: object
+ properties:
+ firstName:
+ type: string
+ example: John
+ lastName:
+ type: string
+ example: DoeABC
+ companyName:
+ type: string
+ example: Company
+ emailAddress:
+ type: string
+ example: johndoe@symphony.com
+ phoneNumber:
+ type: string
+ example: 911234567890
+ externalNetwork:
+ description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
+ type: string
+ example: WHATSAPP
+ symphonyId:
+ type: string
+ description: Federated user Symphony ID
+ example: 12345678912365
+ advisors:
+ type: array
+ description: Advisors Symphony IDs
+ items:
+ type: string
+ example: 14362370637825
+ update-contacts-response-v2:
+ type: object
+ properties:
+ firstName:
+ type: string
+ example: John
+ lastName:
+ type: string
+ example: DoeABC
+ companyName:
+ type: string
+ example: Company
+ emailAddress:
+ type: string
+ example: johndoe@symphony.com
+ phoneNumber:
+ type: string
+ example: 911234567890
+ symphonyId:
+ type: string
+ description: Federated user Symphony id
+ example: 12345678912365
+ advisors:
+ type: array
+ description: Advisors Symphony IDs
+ items:
+ type: string
+ example: 14362370637825
+ preferredLanguage:
+ type: string
+ description: Contact preferred language
+ example: CHINESE_CHN, CHINESE_HKG, CHINESE_TAI, JAPANESE, etc.
+ update-forbidden-for-advisor:
+ type: object
+ properties:
+ type:
+ type: string
+ format: update.forbidden.advisor
+ title:
+ type: string
+ format: Contacts update is forbidden for this Advisor.
+ status:
+ type: integer
+ format: "403"
+ description: Contacts update is forbidden for this Advisor.
+ update-forbidden-for-contact:
+ type: object
+ properties:
+ type:
+ type: string
+ format: update.forbidden.contact
+ title:
+ type: string
+ format: Update forbidden for this contact.
+ status:
+ type: integer
+ format: "403"
+ description: Update forbidden for this contact.
+ multi-tenant-federated-user-update-attempt:
+ type: object
+ properties:
+ type:
+ type: string
+ format: multi.tenant.federated.user.update.attempt
+ title:
+ type: string
+ format: Found Contact records spanning across more than one tenant.
+ status:
+ type: integer
+ format: "403"
+ description: Found Contact records spanning across more than one tenant.
+ cannot-edit-advisor-own-contact-email:
+ type: object
+ properties:
+ type:
+ type: string
+ format: cannot.edit.advisor.own.contact.email
+ title:
+ type: string
+ format: Cannot edit advisor own contact email.
+ status:
+ type: integer
+ format: "403"
+ description: Cannot edit advisor own contact email
+ update-account-failed:
+ type: object
+ properties:
+ type:
+ type: string
+ format: account.update.failed
+ title:
+ type: string
+ format: Unable to update the Contact.
+ status:
+ type: integer
+ format: "500"
+ description: Gateway microservice cannot update the Symphony account.
+ advisors-search-response:
+ type: object
+ properties:
+ advisors:
+ type: array
+ items:
+ $ref: "#/components/schemas/entitlement-response"
+ pagination:
+ $ref: "#/components/schemas/pagination"
+ search-contacts-response:
+ type: object
+ properties:
+ contacts:
+ type: array
+ items:
+ $ref: '#/components/schemas/search-contact-response'
+ pagination:
+ $ref: '#/components/schemas/pagination'
+
+ contacts-response:
+ type: object
+ properties:
+ contacts:
+ type: array
+ items:
+ $ref: "#/components/schemas/add-contact-response"
+ pagination:
+ $ref: "#/components/schemas/pagination"
+ rooms-response:
+ type: object
+ properties:
+ rooms:
+ type: array
+ items:
+ $ref: "#/components/schemas/room-response"
+ pagination:
+ $ref: "#/components/schemas/pagination"
+ room-response:
+ type: object
+ properties:
+ streamId:
+ type: string
+ example: bjHSiY4iz3ar4iIh6-VzCX___peoM7cPdA
+ roomName:
+ type: string
+ example: API room
+ advisorSymphonyId:
+ type: string
+ example: 12345678912365
+ federationGroupId:
+ type: string
+ example: federationGroupId
+ created:
+ type: string
+ format: date-time
+ example: 1547661232368
+ updated:
+ type: string
+ format: date-time
+ example: 1547661232370
+ roomType:
+ type: string
+ enum:
+ - ROOM
+ - IM
+ membersCount:
+ type: integer
+ example: 1
+ company:
+ type: string
+ example: Company
+ roomStatus:
+ type: string
+ enum:
+ - ACTIVE
+ - LIMITED
+ - DEACTIVATED
+ - UNKNOWN
+ limitedMembersCount:
+ type: integer
+ example: 1
+ pendingMembersCount:
+ type: integer
+ example: 2
+ unknownStatusMembersCount:
+ type: integer
+ example: 0
+ room-creation-response:
+ type: object
+ properties:
+ streamId:
+ type: string
+ example: bjHSiY4iz3ar4iIh6-VzCX___peoM7cPdA
+ roomName:
+ type: string
+ example: API room
+ advisorSymphonyId:
+ type: string
+ example: 12345678912365
+ federationGroupId:
+ type: string
+ example: federationGroupId
+ created:
+ type: string
+ format: date-time
+ example: 1547661232368
+ updated:
+ type: string
+ format: date-time
+ example: 1547661232370
+ roomType:
+ type: string
+ enum:
+ - ROOM
+ - IM
+ membersCount:
+ type: integer
+ example: 1
+ room-creation-response-v2:
+ allOf:
+ - $ref: "#/components/schemas/room-creation-response"
+ - type: object
+ properties:
+ externalNetworkRoomDisplayName:
+ type: string
+ room-request:
+ required:
+ - advisorEmailAddress
+ - externalNetwork
+ - roomName
+ type: object
+ properties:
+ roomName:
+ maxLength: 50
+ type: string
+ example: API room
+ advisorEmailAddress:
+ type: string
+ format: email
+ example: william.smith@symphony.com
+ externalNetwork:
+ description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
+ maxLength: 50
+ type: string
+ example: WHATSAPP
+ room-requestv2:
+ required:
+ - ownerSymphonyId
+ - externalNetwork
+ - roomName
+ type: object
+ properties:
+ roomName:
+ maxLength: 50
+ type: string
+ example: API room
+ federationGroupId:
+ type: string
+ example: federationGroupId
+ externalNetworkRoomDisplayName:
+ maxLength: 50
+ type: string
+ example: API room
+ ownerSymphonyId:
+ type: string
+ format: number
+ example: 1234567890
+ externalNetwork:
+ description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
+ maxLength: 50
+ type: string
+ example: WHATSAPP
+ rename-room-request:
+ type: object
+ required:
+ - newRoomName
+ properties:
+ newRoomName:
+ type: string
+ minLength: 1
+ maxLength: 50
+ transfer-room-ownership-request:
+ type: object
+ required:
+ - newRoomOwnerSymphonyId
+ properties:
+ newRoomOwnerSymphonyId:
+ type: string
+ format: number
+ example: 1234567890
+ rename-room-response:
+ type: object
+ properties:
+ streamId:
+ type: string
+ oldRoomName:
+ type: string
+ newRoomName:
+ type: string
+ connection-not-accepted:
+ type: object
+ properties:
+ type:
+ type: string
+ format: connection.not.accepted
+ title:
+ type: string
+ format: connection with Symphony Connect Assistant is not accepted
+ status:
+ type: integer
+ format: "400"
+ description: Connection with Symphony Connect Assistant is not accepted
+ federated-account-not-found:
+ type: object
+ properties:
+ type:
+ type: string
+ format: federated.account.not.found
+ title:
+ type: string
+ format: federated account not found
+ status:
+ type: integer
+ format: "404"
+ description: FederatedAccount not found.
+ room-already-exists:
+ type: object
+ properties:
+ type:
+ type: string
+ format: room.already.exists
+ title:
+ type: string
+ format: Room already exists.
+ status:
+ type: integer
+ format: "409"
+ description: Room already exists.
+ create-room-failed:
+ type: object
+ properties:
+ type:
+ type: string
+ format: room.creation.failed
+ title:
+ type: string
+ format: Unable to create the room.
+ status:
+ type: integer
+ format: "500"
+ description: Gateway microservice cannot create the room.
+ missing-connection-with-connect-bot:
+ type: object
+ properties:
+ type:
+ type: string
+ format: missing.connection.with.connect.bot
+ title:
+ type: string
+ format: connection with Symphony Connect Assistant does not exist
+ status:
+ type: integer
+ format: "500"
+ description: Connection with Symphony Connect Assistant does not exist
+ room-members-response:
+ type: object
+ properties:
+ members:
+ type: array
+ items:
+ $ref: "#/components/schemas/room-member-response"
+ pagination:
+ $ref: "#/components/schemas/pagination"
+ room-member-response:
+ type: object
+ properties:
+ streamId:
+ type: string
+ example: bjHSiY4iz3ar4iIh6-VzCX___peoM7cPdA
+ symphonyId:
+ type: string
+ example: 12345678912365
+ federatedUserId:
+ type: string
+ example: 14362370637825
+ externalNetwork:
+ description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
+ type: string
+ example: WHATSAPP
+ firstName:
+ type: string
+ example: John
+ lastName:
+ type: string
+ example: Doe
+ companyName:
+ type: string
+ example: Company
+ avatar:
+ type: string
+ example: "https://YOURDOMAIN.symphony.com/avatars/3gXMhglCCTwLPL9JAprnyHzYn5-PR49-wYDG814n1g8.png"
+ displayName:
+ type: string
+ example: John Doe
+ emailAddress:
+ type: string
+ example: johndoe@symphony.com
+ isOwner:
+ type: boolean
+ example: false
+ empChannelConnector:
+ allOf:
+ - $ref: "#/components/schemas/emp-channel-connector"
+ description: "Network channel connector used for room member. Only for LINE"
+ room-set-activity-response:
+ type: object
+ properties:
+ isRoomActivityUpdated:
+ type: boolean
+ newRoomStatus:
+ type: string
+ enum:
+ - ACTIVE
+ - DEACTIVATED
+ remove-room-members-response:
+ type: object
+ properties:
+ isRoomDeleted:
+ type: boolean
+ advisor-contact-rooms-response:
+ type: object
+ description: Rooms for an advisor and contact
+ properties:
+ advisorSymphonyId:
+ type: string
+ format: string
+ pattern: '^\d+$'
+ example: 1234567890
+ contactSymphonyId:
+ type: string
+ format: string
+ pattern: '^\d+$'
+ example: 1234567890
+ sortedBy:
+ type: string
+ enum:
+ - createdDate_DESC
+ rooms:
+ type: array
+ description: Room basic information
+ items:
+ $ref: '#/components/schemas/room-basic-information'
+ room-basic-information:
+ type: object
+ properties:
+ stream-id:
+ type: string
+ room-name:
+ type: string
+ emp:
+ type: string
+ created-date:
+ type: integer
+ format: int64
+ remove-room-member-forbidden:
+ type: object
+ properties:
+ type:
+ type: string
+ format: remove.room.member.forbidden
+ title:
+ type: string
+ format: Remove room member forbidden
+ status:
+ type: integer
+ format: "403"
+ description: Remove room member forbidden
+ room-not-found:
+ type: object
+ properties:
+ type:
+ type: string
+ format: room.not.found
+ title:
+ type: string
+ format: Room not found
+ status:
+ type: integer
+ format: "404"
+ description: Room not found
+ room-member-not-found:
+ type: object
+ properties:
+ type:
+ type: string
+ format: room.member.not.found
+ title:
+ type: string
+ format: Room member not found
+ status:
+ type: integer
+ format: "404"
+ description: Room member not found
+ update-room-status-failed:
+ type: object
+ description: 'Gateway microservice cannot update the status of the room.'
+ properties:
+ type:
+ type: string
+ format: 'update.room.status.failed'
+ title:
+ type: string
+ format: 'Unable to update the status of the room.'
+ status:
+ type: integer
+ format: "500"
+ reactivate-room-not-implemented:
+ type: object
+ description: 'Reactivate Room Not Implemented'
+ properties:
+ type:
+ type: string
+ format: 'reactivate.room.not.implemented'
+ title:
+ type: string
+ format: 'Reactivate Room Not Implemented'
+ status:
+ type: integer
+ format: "501"
+ room-features-request:
+ type: object
+ properties:
+ attachmentsDisabled:
+ description: Allows to enable or disable attachments in a room. Only supported for WhatsApp.
+ type: boolean
+ room-set-activity-request:
+ type: object
+ required:
+ - setActive
+ properties:
+ setActive:
+ type: boolean
+ room-member-request:
+ required:
+ - advisorEmailAddress
+ - externalNetwork
+ - contact
+ - memberEmailAddress
+ - streamId
+ type: object
+ properties:
+ streamId:
+ type: string
+ example: bjHSiY4iz3ar4iIh6-VzCX___peoM7cPdA
+ memberEmailAddress:
+ type: string
+ format: email
+ example: johndoe@symphony.com
+ advisorEmailAddress:
+ type: string
+ format: email
+ example: william.smith@symphony.com
+ externalNetwork:
+ description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
+ type: string
+ example: WHATSAPP
+ contact:
+ type: boolean
+ example: true
+ room-member-requestv2:
+ required:
+ - advisorSymphonyId
+ - memberSymphonyId
+ - externalNetwork
+ - contact
+ type: object
+ properties:
+ memberSymphonyId:
+ type: string
+ format: number
+ example: 1234567890
+ advisorSymphonyId:
+ type: string
+ format: number
+ example: 1234567890
+ externalNetwork:
+ description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
+ type: string
+ example: WHATSAPP
+ contact:
+ description: "Boolean indicating whether added member is an advisor (false) or a federated user (true)"
+ type: boolean
+ default: false
+ empChannelConnector:
+ description: "ID of the Emp channel Connector to use to reach the federated user. Required for LINE in case automatic LINE channel selection feature is not enabled for your tenant, not applicable for the other external networks."
+ type: string
+ multi-external-network-room-not-supported:
+ type: object
+ properties:
+ type:
+ type: string
+ format: multi.external.network.room.not.supported
+ title:
+ type: string
+ format: multi external network rooms not supported
+ status:
+ type: integer
+ format: "400"
+ description: Multi-External network rooms are not supported.
+ multi-company-room-not-supported:
+ type: object
+ properties:
+ type:
+ type: string
+ format: multi.company.room.not.supported
+ title:
+ type: string
+ format: multi company rooms not supported
+ status:
+ type: integer
+ format: "400"
+ description: Multi-Company rooms are not supported.
+ member-already-in-room:
+ type: object
+ properties:
+ type:
+ type: string
+ format: member.already.in.room
+ title:
+ type: string
+ format: Member already in room.
+ status:
+ type: integer
+ format: "409"
+ description: Member already in room.
+ add-room-member-failed:
+ type: object
+ properties:
+ type:
+ type: string
+ format: add.room.member.failed
+ title:
+ type: string
+ format: Unable to add the member to room.
+ status:
+ type: integer
+ format: "500"
+ description: Gateway microservice cannot create/add the member to room.
+ add-room-member-conflicted:
+ type: object
+ description: Gateway microservice cannot create/add the member in the room.
+ properties:
+ type:
+ type: string
+ format: add.room.member.conflicted
+ title:
+ type: string
+ format: Unable to add the member in the room.
+ status:
+ type: integer
+ format: "409"
+ bulk-room-member-multi-room-requestv2:
+ type: object
+ properties:
+ requests:
+ maxItems: 20
+ minItems: 1
+ type: array
+ items:
+ $ref: "#/components/schemas/room-member-multi-room-requestv2"
+ advisorSymphonyId:
+ type: string
+ format: number
+ example: 1234567890
+ externalNetwork:
+ description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
+ type: string
+ example: WHATSAPP
+ room-member-multi-room-requestv2:
+ required:
+ - memberSymphonyId
+ - streamId
+ type: object
+ properties:
+ streamId:
+ type: string
+ example: bjHSiY4iz3ar4iIh6-VzCX___peoM7cPdA
+ memberSymphonyId:
+ type: string
+ format: number
+ example: 1234567890
+ empChannelConnector:
+ type: string
+ format: string
+ example: SYM0001
+ bulk-room-member-responsev2:
+ type: object
+ properties:
+ members:
+ type: array
+ items:
+ $ref: "#/components/schemas/bulk-room-member-item-responsev2"
+ bulk-room-member-item-responsev2:
+ type: object
+ properties:
+ status:
+ type: integer
+ response:
+ $ref: "#/components/schemas/room-member-response"
+ error:
+ $ref: "#/components/schemas/bulk-item-error"
+ bulk-room-member-multi-room-request:
+ type: object
+ properties:
+ requests:
+ maxItems: 100
+ minItems: 1
+ type: array
+ items:
+ $ref: "#/components/schemas/room-member-multi-room-request"
+ advisorEmailAddress:
+ type: string
+ format: email
+ example: william.smith@symphony.com
+ externalNetwork:
+ description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
+ type: string
+ example: WHATSAPP
+ room-member-multi-room-request:
+ required:
+ - contact
+ - memberEmailAddress
+ - streamId
+ type: object
+ properties:
+ streamId:
+ type: string
+ example: bjHSiY4iz3ar4iIh6-VzCX___peoM7cPdA
+ memberEmailAddress:
+ type: string
+ format: email
+ example: johndoe@symphony.com
+ contact:
+ type: boolean
+ example: true
+ bulk-room-member-response:
+ type: object
+ properties:
+ members:
+ type: array
+ items:
+ $ref: "#/components/schemas/bulk-room-member-item-response"
+ bulk-room-member-item-response:
+ type: object
+ properties:
+ status:
+ type: integer
+ response:
+ $ref: "#/components/schemas/room-member-response"
+ error:
+ $ref: "#/components/schemas/bulk-item-error"
+ list-federation-groups-item-response:
+ type: object
+ properties:
+ federationGroupId:
+ type: string
+ description: Internal system federation group identifier
+ example: company-federation-group1
+ federationGroupName:
+ type: string
+ description: Out facing customer display name
+ example: federationGroup
+ activeExternalNetworks:
+ type: array
+ description: List of activated external network for the federation group
+ items:
+ type: string
+ description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
+ example: WHATSAPP
+ list-federation-groups-response:
+ type: object
+ properties:
+ federationGroups:
+ type: array
+ items:
+ $ref: '#/components/schemas/list-federation-groups-item-response'
+ pagination:
+ $ref: '#/components/schemas/pagination'
+ bulk-update-federation-group-item-request:
+ type: object
+ required:
+ - externalNetwork
+ - symphonyId
+ properties:
+ symphonyId:
+ type: string
+ example: 123456789
+ externalNetwork:
+ type: string
+ description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
+ example: WHATSAPP
+ federationGroupId:
+ type: string
+ example: company-federation-group1
+ bulk-update-federation-group-request:
+ type: object
+ properties:
+ request:
+ type: array
+ items:
+ $ref: '#/components/schemas/bulk-update-federation-group-item-request'
+ minItems: 1
+ maxItems: 100
+ example:
+ request:
+ - symphonyId: 1234512345
+ externalNetwork: WHATSAPP
+ federationGroupId: company-federation-group1
+ - symphonyId: 1357913579
+ externalNetwork: WHATSAPP
+ federationGroupId: company-federation-group2
+ update-federation-group-request:
+ type: object
+ required:
+ - federationGroupId
+ properties:
+ federationGroupId:
+ type: string
+ example: company-federation-group1
+ moveToDefault:
+ type: boolean
+ update-federation-group-response:
+ type: object
+ properties:
+ symphonyId:
+ type: string
+ example: 123456789
+ federationGroupId:
+ type: string
+ example: company-federation-group1
+ externalNetwork:
+ type: string
+ example: WHATSAPP
+ bulk-update-federation-group-item-response:
+ type: object
+ properties:
+ status:
+ type: integer
+ response:
+ type: object
+ $ref: '#/components/schemas/update-federation-group-response'
+ error:
+ type: object
+ $ref: '#/components/schemas/bulk-item-error'
+
+ update-contact-response:
+ type: object
+ properties:
+ blocked:
+ type: object
+ $ref: '#/components/schemas/block-contact-information'
+ update-contact-request:
+ type: object
+ properties:
+ blocked:
+ type: object
+ $ref: '#/components/schemas/block-contact-information'
+ block-contact-information:
+ type: object
+ properties:
+ reason:
+ type: string
+ comment:
+ type: string
+ updateDate:
+ type: string
+ format: date-time
+
+ bulk-update-federation-group-response:
+ type: object
+ properties:
+ responses:
+ type: array
+ items:
+ $ref: '#/components/schemas/bulk-update-federation-group-item-response'
+ room-set-federation-group-request:
+ type: object
+ properties:
+ federationGroupId:
+ type: string
+ example: 123456789
+ moveToDefault:
+ type: boolean
+ example: true
+ rfc-error:
+ type: object
+ properties:
+ type:
+ type: string
+ description: |
+ An absolute URI that identifies the problem type. When dereferenced,
+ it SHOULD provide human-readable documentation for the problem type
+ (e.g., using HTML).
+ format: uri
+ example: "https://zalando.github.io/problem/constraint-violation"
+ default: "about:blank"
+ title:
+ type: string
+ description: |
+ A short, summary of the problem type. Written in English and readable
+ for engineers (usually not suited for non technical stakeholders and
+ not localized); example: Service Unavailable
+ status:
+ maximum: 600
+ exclusiveMaximum: true
+ minimum: 100
+ type: integer
+ description: |
+ The HTTP status code generated by the origin server for this occurrence
+ of the problem.
+ format: int32
+ example: 503
+ detail:
+ type: string
+ description: |
+ A human readable explanation specific to this occurrence of the
+ problem.
+ example: Connection to database timed out
+ instance:
+ type: string
+ description: |
+ An absolute URI that identifies the specific occurrence of the problem.
+ It may or may not yield further information if dereferenced.
+ format: uri
+ companies-search-response:
+ type: object
+ properties:
+ companies:
+ type: array
+ items:
+ $ref: "#/components/schemas/company-response"
+ company-response:
+ type: object
+ properties:
+ companyName:
+ type: string
+ example: symphony
+ pagination:
+ title: Pagination
+ type: object
+ properties:
+ previous:
+ type: string
+ format: uri
+ example: "?before=ewogICJlbWFpbEFkZHJlc3MiOiB7CiAgICAicyI6ICJtb2NrLnVzZXJAbW9jay5jb20iCiAgfQp9"
+ next:
+ type: string
+ format: uri
+ example: "?after=ewogICJlbWFpbEFkZHJlc3MiOiB7CiAgICAicyI6ICJtb2NrLnVzZXJAbW9jay5jb20iCiAgfQp9"
+ cursors:
+ $ref: "#/components/schemas/cursors"
+ cursors:
+ title: Cursors
+ type: object
+ properties:
+ before:
+ type: string
+ example: ewogICJlbWFpbEFkZHJlc3MiOiB7CiAgICAicyI6ICJtb2NrLnVzZXJAbW9jay5jb20iCiAgfQp9
+ after:
+ type: string
+ example: ewogICJlbWFpbEFkZHJlc3MiOiB7CiAgICAicyI6ICJtb2NrLnVzZXJAbW9jay5jb20iCiAgfQp9
+ bulk-removal-status:
+ type: string
+ enum:
+ - FAILURE
+ - SUCCESS
+ bulk-removal-statusv2:
+ type: string
+ enum:
+ - FAILURE
+ - SUCCESS
+ - NOT_FOUND
+ bulk-item-error:
+ type: object
+ properties:
+ itemId:
+ type: string
+ description: Context dependent identifier of the item
+ type:
+ type: string
+ description: |
+ An absolute URI that identifies the problem type. When dereferenced,
+ it SHOULD provide human-readable documentation for the problem type
+ (e.g., using HTML).
+ format: uri
+ example: "https://zalando.github.io/problem/constraint-violation"
+ default: "about:blank"
+ title:
+ type: string
+ description: |
+ A short, summary of the problem type. Written in English and readable
+ for engineers (usually not suited for non technical stakeholders and
+ not localized); example: Service Unavailable
+ statusCode:
+ maximum: 600
+ exclusiveMaximum: true
+ minimum: 100
+ type: integer
+ description: |
+ The HTTP status code generated by the origin server for this occurrence
+ of the problem.
+ format: int32
+ example: 503
+ detail:
+ type: string
+ description: |
+ A human readable explanation specific to this occurrence of the
+ problem.
+ example: Connection to database timed out
+ instance:
+ type: string
+ description: |
+ An absolute URI that identifies the specific occurrence of the problem.
+ It may or may not yield further information if dereferenced.
+ format: uri
+ # TODO
+ # use map instead of object
+ # but readme.io does not support maps
+ parameters:
+ type: object
+ properties:
+ additionalProp1:
+ type: "string"
+ additionalProp2:
+ type: "string"
+ additionalProp3:
+ type: "string"
+ contact-request:
+ required:
+ - externalNetwork
+ - firstName
+ - lastName
+ - phoneNumber
+ type: object
+ properties:
+ firstName:
+ type: string
+ example: John
+ lastName:
+ type: string
+ example: Doe
+ companyName:
+ type: string
+ example: Company
+ description: For SMS, LINE, WHATSAPP and WECHAT, the companyName is mandatory
+ maxLength: 100
+ emailAddress:
+ type: string
+ format: email
+ example: johndoe@symphony.com
+ description: For SMS, LINE, WHATSAPP and WECHAT, the emailAddress is mandatory
+ phoneNumber:
+ type: string
+ format: phone
+ example: 911234567890
+ externalNetwork:
+ description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
+ type: string
+ example: WHATSAPP
+ advisorSymphonyIds:
+ type: array
+ description: A list of Symphony user IDs of the advisors to add the contact to.
+ items:
+ pattern: ^\d+$
+ type: number
+ example: 14362370637825
+ preferredLanguage:
+ type: string
+ description: Contact preferred language code
+ example: CHINESE_CHN, CHINESE_HKG, CHINESE_TAI, JAPANESE (among others, see release note for more)
+ update-contacts-request:
+ required:
+ - companyName
+ - phoneNumber
+ - externalNetwork
+ - firstName
+ - lastName
+ type: object
+ properties:
+ firstName:
+ type: string
+ example: John
+ lastName:
+ type: string
+ example: DoeABC
+ companyName:
+ type: string
+ example: Company
+ maxLength: 100
+ phoneNumber:
+ type: string
+ format: phone
+ example: 911234567890
+ externalNetwork:
+ type: string
+ example: WHATSAPP
+ description: WHATSAPP
+ number-response:
+ type: object
+ required:
+ - phoneNumber
+ properties:
+ phoneNumber:
+ type: string
+ example: 911234567890
+ subNetwork:
+ type: string
+ country:
+ type: string
+ carrier:
+ type: string
+ provider:
+ type: string
+ status:
+ type: string
+ address:
+ $ref: '#/components/schemas/address-response'
+ assignedTo:
+ $ref: '#/components/schemas/assigned-to'
+ phone-numbers-details-response:
+ type: object
+ properties:
+ numbers:
+ type: array
+ items:
+ $ref: '#/components/schemas/phone-number-info'
+ update-number-request:
+ type: object
+ properties:
+ assignedTo:
+ $ref: '#/components/schemas/assigned-to-request'
+ assigned-to-request:
+ type: object
+ properties:
+ advisorSymphonyId:
+ type: string
+ example: 911234567890
+ description: |
+ The Symphony identifier of the advisor to assign this resource to, or empty string to unassign.
+ address-response:
+ type: object
+ properties:
+ property:
+ type: string
+ example: Symphony
+ line1:
+ type: string
+ example: 980 Avenue de Roumanille
+ line2:
+ type: string
+ example: Le Fairway, Bâtiment A
+ city:
+ type: string
+ example: Biot
+ state:
+ type: string
+ example: France
+ zip:
+ type: string
+ example: 06410
+ zipPlusFour:
+ type: string
+ example: 06410
+ address-request:
+ type: object
+ properties:
+ property:
+ type: string
+ example: Symphony
+ line1:
+ type: string
+ example: 980 Avenue de Roumanille
+ line2:
+ type: string
+ example: Le Fairway, Bâtiment A
+ city:
+ type: string
+ example: Biot
+ state:
+ type: string
+ example: France
+ zip:
+ type: string
+ example: 06410
+ zipPlusFour:
+ type: string
+ example: 06410
+ federation-group-emp-forbidden:
+ type: object
+ description: Access is denied, you don't have the permission to perform this operation
+ properties:
+ type:
+ type: string
+ format: federation.group.external.network.forbidden
+ title:
+ type: string
+ example: The external network is not activated for federation group federation-group-id
+ status:
+ type: integer
+ format: "403"
+ not-applicable-for-external-network:
+ type: object
+ description: 'Not Applicable for the given external network.'
+ properties:
+ type:
+ type: string
+ format: 'not.applicable.for.external.network'
+ title:
+ type: string
+ format: 'Not Applicable for the given external network.'
+ status:
+ type: integer
+ format: "406"
+ federation-group-not-found:
+ type: object
+ properties:
+ type:
+ type: string
+ format: federation.group.not.found
+ title:
+ type: string
+ format: Federation group not found.
+ status:
+ type: integer
+ format: "404"
+ description: Federation group not found
+
+ tenant-not-found:
+ type: object
+ description: 'Tenant not found'
+ properties:
+ type:
+ type: string
+ format: 'tenant.not.found'
+ title:
+ type: string
+ format: 'Tenant not found'
+ status:
+ type: integer
+ format: "404"
+ room-update-federation-group-errors:
+ type: object
+ properties:
+ type:
+ type: string
+ example: room.update.failed
+ title:
+ type: string
+ example: room update failed
+ status:
+ type: integer
+ example: 409
+ errors:
+ type: array
+ items:
+ type: object
+ properties:
+ symphonyId:
+ type: string
+ example: 123456789
+ reason:
+ type: string
+ description: External network specific error related to each room channel
+ example: Could not allocate new phone number for the customer.
+ errorCode:
+ type: string
+ description: External network specific error code
+ example: no.business.api.available
+ preferred-language-not-supported:
+ type: object
+ description: Preferred language not supported.
+ properties:
+ type:
+ type: string
+ format: preferred.language.not.supported
+ title:
+ type: string
+ format: Preferred language not supported.
+ status:
+ type: integer
+ format: "400"
+ resend-invite-response:
+ type: object
+ properties:
+ invitationCode:
+ type: string
+ example: "AB12DE43"
+ invite-already-confirmed:
+ type: object
+ description: 'Invite is already confirmed.'
+ properties:
+ type:
+ type: string
+ format: 'invite.already.confirmed'
+ title:
+ type: string
+ format: 'Invite is already confirmed.'
+ status:
+ type: integer
+ format: "400"
+ invites-not-configured-on-emp:
+ type: object
+ description: 'Invites not configured on EMP'
+ properties:
+ type:
+ type: string
+ format: 'invites.not.configured.on.emp'
+ title:
+ type: string
+ format: 'Invites not configured on Emp.'
+ status:
+ type: integer
+ format: "400"
+ resend-invite-failed:
+ type: object
+ description: 'Invite resend failed.'
+ properties:
+ type:
+ type: string
+ format: 'resend.invite.failed'
+ title:
+ type: string
+ format: 'Resend invite failed.'
+ status:
+ type: integer
+ format: "500"
+ copy-contact-response:
+ type: object
+ properties:
+ newSymphonyId:
+ type: string
+ description: Symphony user ID of the account copy
+ example: 12345678912365
+ migratedStreamIds:
+ type: array
+ description: StreamIds of the rooms in which the user's account has been replaced with the account copy.
+ items:
+ type: string
+ user-copy-not-supported-for-network:
+ type: object
+ properties:
+ type:
+ type: string
+ format: user.copy.not.supported.for.network
+ title:
+ type: string
+ format: user copy not supported for the external network
+ status:
+ type: integer
+ format: "400"
+ description: |
+ Contact copy is not supported for the external network of the contact. Contact copy is supported only for WHATSAPP and SMS.
+ current-tenant-has-own-user-copy:
+ type: object
+ properties:
+ type:
+ type: string
+ format: current.tenant.has.own.user.copy
+ title:
+ type: string
+ format: Current tenant has already its own copy for user.
+ status:
+ type: integer
+ format: "409"
+ description: Tenant requesting the contact copy already has its own copy of the contact. The copy contact action is not required.
+ user-copy-not-supported-for-ims:
+ type: object
+ properties:
+ type:
+ type: string
+ format: user.copy.not.own.supported.for.ims
+ title:
+ type: string
+ format: User copy is not supported for user having IMs
+ status:
+ type: integer
+ format: "403"
+ description: Contact copy is not supported for users who are part of IMs. These IMs need to be removed first.
+ copy-contact-failed:
+ type: object
+ description: 'Unable to copy the contact.'
+ properties:
+ type:
+ type: string
+ format: 'account.copy.failed'
+ title:
+ type: string
+ format: 'Unable to copy the account.'
+ status:
+ type: integer
+ format: "500"
+ number-not-found:
+ type: object
+ description: 'Number not found'
+ properties:
+ type:
+ type: string
+ format: 'number.not.found'
+ title:
+ type: string
+ format: 'Number not found'
+ status:
+ type: integer
+ format: "404"
+ no-numbers-found:
+ type: object
+ description: 'No numbers found'
+ properties:
+ type:
+ type: string
+ format: 'no.numbers.found'
+ title:
+ type: string
+ format: 'No numbers found'
+ status:
+ type: integer
+ format: "404"
+ address-already-empty:
+ type: object
+ description: 'Address already empty'
+ properties:
+ type:
+ type: string
+ format: 'address.already.empty'
+ title:
+ type: string
+ format: 'Address already empty'
+ status:
+ type: integer
+ format: "400"
+ no-field-updated:
+ type: object
+ description: 'No field updated'
+ properties:
+ type:
+ type: string
+ format: 'no.field.updated'
+ title:
+ type: string
+ format: 'No field updated'
+ status:
+ type: integer
+ format: "400"
+
+ advisor-already-has-phone-allocated-problem:
+ type: object
+ description: 'The advisor already has an allocated phone number.'
+ properties:
+ type:
+ type: string
+ format: 'advisor.already.has.phone.allocated'
+ title:
+ type: string
+ format: 'The advisor already has an allocated phone number.'
+ status:
+ type: integer
+ format: "409"
+ phone-number-already-allocated-problem:
+ type: object
+ description: 'The phone number is already allocated.'
+ properties:
+ type:
+ type: string
+ format: 'phone.already.allocated'
+ title:
+ type: string
+ format: 'The phone number is already allocated.'
+ status:
+ type: integer
+ format: "409"
+ phone-number-pre-allocation-not-supported-problem:
+ description: 'Phone number pre-allocation is not supported for this external network.'
+ properties:
+ type:
+ type: string
+ format: 'phone.number.pre.allocation.not.supported'
+ title:
+ type: string
+ format: 'Phone number pre-allocation is not supported.'
+ status:
+ type: integer
+ format: "400"
+ pre-entitlement-failed:
+ type: object
+ description: 'Pre-entitlement failed.'
+ properties:
+ type:
+ type: string
+ format: 'pre.entitlement.failed'
+ title:
+ type: string
+ format: 'Pre-entitlement failed.'
+ status:
+ type: integer
+ format: "500"
+ pre-entitlement-not-found:
+ type: object
+ description: 'Pre-entitlement not found'
+ properties:
+ type:
+ type: string
+ format: 'pre.entitlement.not.found'
+ title:
+ type: string
+ format: 'Pre-entitlement not found'
+ status:
+ type: integer
+ format: "404"
+
+ advisor-already-entitled:
+ type: object
+ description: 'Advisor already entitled'
+ properties:
+ type:
+ type: string
+ format: 'advisor.already.entitled'
+ title:
+ type: string
+ format: 'Advisor already entitled'
+ status:
+ type: integer
+ format: "403"
+
+ advisor-already-entitled-for-direct-emp:
+ type: object
+ description: Advisor is already entitled to another direct EMP
+ properties:
+ type:
+ type: string
+ format: advisor.already.entitled.for.direct.emp
+ title:
+ type: string
+ format: The advisor for which the number is reassigned must not be entitled on a direct EMP
+ status:
+ type: integer
+ format: "403"
+
+ advisor-still-entitled:
+ type: object
+ description: |
+ Returned when the advisor associated with the phone number is still entitled to a direct EMP.
+ properties:
+ type:
+ type: string
+ format: 'advisor.still.entitled'
+ title:
+ type: string
+ format: An advisor is still entitled to a Direct EMP with this phone number
+ status:
+ type: integer
+ format: "403"
+
+ customer-block-phone-numbers-request:
+ type: object
+ required:
+ - phoneNumbers
+ properties:
+ phoneNumbers:
+ type: array
+ items:
+ $ref: '#/components/schemas/customer-block-phone-numbers-item-request'
+ minItems: 1
+ maxItems: 100
+
+ customer-unblock-phone-numbers-request:
+ type: object
+ required:
+ - phoneNumbers
+ properties:
+ phoneNumbers:
+ type: string
+ format: phone
+
+ customer-block-phone-numbers-item-request:
+ type: object
+ required:
+ - phoneNumber
+ - reason
+ properties:
+ phoneNumber:
+ type: string
+ format: phone
+ reason:
+ $ref: '#/components/schemas/blocking-reason-enum'
+ comment:
+ type: string
+
+
+ get-blocked-phone-numbers-response:
+ type: object
+ properties:
+ phoneNumbers:
+ type: array
+ items:
+ $ref: '#/components/schemas/get-blocked-phone-numbers-item'
+
+ get-blocked-phone-numbers-item:
+ type: object
+ properties:
+ phoneNumber:
+ type: string
+ format: phone
+ reason:
+ $ref: '#/components/schemas/blocking-reason-enum'
+ comment:
+ type: string
+
+ blocking-reason-enum:
+ type: string
+ enum:
+ - SPAM
+ - ABUSE
+ - COMPLIANCE
+ - OTHER
+
+ # Responses
+ customer-block-phone-numbers-response:
+ type: object
+ properties:
+ phoneNumbers:
+ type: array
+ items:
+ $ref: '#/components/schemas/customer-block-phone-numbers-item-response'
+
+ customer-block-phone-numbers-item-response:
+ type: object
+ properties:
+ phoneNumber:
+ type: string
+ status:
+ type: integer
+ error:
+ type: object
+ $ref: '#/components/schemas/bulk-item-error'
+
+ not-entitled-on-direct-emp:
+ type: object
+ description: 'Not Entitled on direct emp.'
+ properties:
+ type:
+ type: string
+ format: 'not.entitled.on.direct.emp'
+ title:
+ type: string
+ format: 'Not Entitled on direct emp.'
+ status:
+ type: integer
+ format: "403"
+
+ phone-number-not-found:
+ type: object
+ description: 'Phone number not found'
+ properties:
+ type:
+ type: string
+ format: 'phone.number.not.found'
+ title:
+ type: string
+ format: 'Phone number not found'
+ status:
+ type: integer
+ format: "404"
+
+ subnetwork-not-implemented:
+ type: object
+ description: 'Subnetwork not implemented.'
+ properties:
+ type:
+ type: string
+ format: 'subnetwork.not.implemented'
+ title:
+ type: string
+ format: 'subnetwork not implemented.'
+ status:
+ type: integer
+ format: "501"
+
+ inline_response_400:
+ oneOf:
+ - $ref: "#/components/schemas/entitlement-user-already-exists-problem"
+ - $ref: "#/components/schemas/symphony-user-not-found-problem"
+ - $ref: "#/components/schemas/entitlement-type-not-found-problem"
+ - $ref: "#/components/schemas/advisor-id-not-provided"
+ inline_response_404_1:
+ oneOf:
+ - $ref: "#/components/schemas/advisor-not-found"
+ - $ref: "#/components/schemas/contact-not-found"
+ inline_response_404_2:
+ oneOf:
+ - $ref: "#/components/schemas/tenant-configuration-not-found"
+ - $ref: "#/components/schemas/advisor-not-found"
+ - $ref: "#/components/schemas/permission-not-found"
+ inline_response_404_3:
+ oneOf:
+ - $ref: "#/components/schemas/advisor-not-found"
+ - $ref: "#/components/schemas/permission-not-found"
+ inline_response_400_1:
+ oneOf:
+ - $ref: "#/components/schemas/external-network-not-found"
+ - $ref: "#/components/schemas/invalid-user-info"
+ inline_response_403:
+ oneOf:
+ - $ref: "#/components/schemas/forbidden-advisor"
+ - $ref: "#/components/schemas/forbidden-onboarder"
+ - $ref: "#/components/schemas/forbidden-entitlement-type"
+ inline_response_409:
+ oneOf:
+ - $ref: "#/components/schemas/user-already-onboarded"
+ - $ref: "#/components/schemas/user-already-exists"
+ inline_response_409_1:
+ oneOf:
+ - $ref: "#/components/schemas/user-already-onboarded"
+ inline_response_403_1:
+ oneOf:
+ - $ref: "#/components/schemas/forbidden-entitlement-type"
+ - $ref: "#/components/schemas/update-forbidden-for-advisor"
+ - $ref: "#/components/schemas/update-forbidden-for-contact"
+ - $ref: "#/components/schemas/multi-tenant-federated-user-update-attempt"
+ inline_response_404_4:
+ oneOf:
+ - $ref: "#/components/schemas/tenant-configuration-not-found"
+ - $ref: "#/components/schemas/contact-not-found"
+ - $ref: "#/components/schemas/advisor-not-found"
+ inline_response_404_5:
+ oneOf:
+ - $ref: "#/components/schemas/advisor-not-found"
+ inline_response_401:
+ oneOf:
+ - $ref: "#/components/schemas/Unauthorized"
+ inline_response_403_0:
+ oneOf:
+ - $ref: "#/components/schemas/Forbidden"
+ inline_response_404_6:
+ oneOf:
+ - $ref: "#/components/schemas/contact-not-found"
+ inline_response_400_2:
+ oneOf:
+ - $ref: "#/components/schemas/connection-not-accepted"
+ inline_response_403_2:
+ oneOf:
+ - $ref: "#/components/schemas/forbidden-advisor"
+ - $ref: "#/components/schemas/forbidden-entitlement-type"
+ inline_response_404_7:
+ oneOf:
+ - $ref: "#/components/schemas/tenant-configuration-not-found"
+ - $ref: "#/components/schemas/advisor-not-found"
+ - $ref: "#/components/schemas/federated-account-not-found"
+ - $ref: "#/components/schemas/contact-not-found"
+ inline_response_500:
+ oneOf:
+ - $ref: "#/components/schemas/create-room-failed"
+ - $ref: "#/components/schemas/missing-connection-with-connect-bot"
+ inline_response_403_3:
+ oneOf:
+ - $ref: "#/components/schemas/forbidden-advisor"
+ - $ref: "#/components/schemas/remove-room-member-forbidden"
+ - $ref: "#/components/schemas/forbidden-entitlement-type"
+ inline_response_404_8:
+ oneOf:
+ - $ref: "#/components/schemas/room-not-found"
+ - $ref: "#/components/schemas/room-member-not-found"
+ - $ref: "#/components/schemas/advisor-not-found"
+ - $ref: "#/components/schemas/tenant-configuration-not-found"
+ inline_response_400_3:
+ oneOf:
+ - $ref: "#/components/schemas/multi-external-network-room-not-supported"
+ - $ref: "#/components/schemas/multi-company-room-not-supported"
+ inline_response_404_9:
+ oneOf:
+ - $ref: "#/components/schemas/tenant-configuration-not-found"
+ - $ref: "#/components/schemas/advisor-not-found"
+ - $ref: "#/components/schemas/room-not-found"
+
+ securitySchemes:
+ sfsAuthentication:
+ type: http
+ scheme: bearer
+ bearerFormat: JWT
+ description: HTTP header
+security:
+ - sfsAuthentication: []
From 23bf1a3a313b77aef97b3fec05da0eeb26545d74 Mon Sep 17 00:00:00 2001
From: Catalin Ghimici <152162343+catalinsymphony@users.noreply.github.com>
Date: Wed, 5 Nov 2025 19:01:20 +0200
Subject: [PATCH 2/3] fix federation spec file to be compatible with 3.0
---
.../local/federation/federation_api.yaml | 7331 -----------------
1 file changed, 7331 deletions(-)
delete mode 100644 api_client_generation/local/federation/federation_api.yaml
diff --git a/api_client_generation/local/federation/federation_api.yaml b/api_client_generation/local/federation/federation_api.yaml
deleted file mode 100644
index d03fd866..00000000
--- a/api_client_generation/local/federation/federation_api.yaml
+++ /dev/null
@@ -1,7331 +0,0 @@
-openapi: 3.0.0
-info:
- title: SFS MS Admin API
- description: see https://symphony-1.gitbook.io/federation/
-
- version: 0.0.1
-
-servers:
- - url: https://CONNECT-DOMAIN
-
-tags:
- - name: Entitlements
- description:
- This API provides endpoints to add or remove advisor entitlements.
-
Entitlements allow an advisor to use an external network such as WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE.
-
- - name: Contact
- description:
- This API provides endpoints to manage Contacts. A Contact is a client of the WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE network (also referred as external network). Advisor, a user of the Symphony connect platform. A contact represents the relation between an external user (a WhatsApp, Wechat, SMS, SMS Direct or LINE user), and an advisor.
- When an advisor onboards, or adds an external user, they become one of their contacts
-
- - name: Permissions
- description:
- An API for managing permissions. Permissions give an advisor the ability to perform certain actions, for example creating a room.
- Note: Permissions are more specific than entitlements.
- An entitlement gives an advisor the right to use an external network (for example, Wechat) whereas a permission gives access to a specific functionality within that external network. An entitlement is a precondiction for a permission.
- If you want to grant the permission "create:room" to an advisor on WhatsApp, the advisor must have the WHATSAPP entitlement.
-
-paths:
- /api/v2/customer/entitlements:
- get:
- tags:
- - Entitlements
- summary: List entitlements (recommended)
- description: |
- List the available entitlements.
- operationId: listEntitlements
- responses:
- "200":
- description: List of found entitlements
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/entitlements-response"
- "401":
- description: Unauthorized
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_401"
- "403":
- description: Operation forbidden
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_403_0"
- security:
- - sfsAuthentication: []
- post:
- tags:
- - Entitlements
- summary: Add entitlement (recommended)
- description: Entitle a Symphony user to use the external network.
- operationId: addEntitlement
- requestBody:
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/entitlement-request"
- responses:
- "201":
- description: The user has successfully been added in the list of entitlements.
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/add-entitlementv2-response"
- "400":
- description: Missing or malformed input
- content:
- application/json:
- schema:
- oneOf:
- - $ref: "#/components/schemas/inline_response_400"
- - $ref: "#/components/schemas/advisor-phone-number-not-supported-problem"
- - $ref: "#/components/schemas/advisor-phone-number-is-required-problem"
- - $ref: "#/components/schemas/pre-entitlement-permissions-not-supported-problem"
- "401":
- description: Unauthorized
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_401"
- "403":
- description: Add user forbidden
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/forbidden-entitlement-type"
- "404":
- description: Not found
- content:
- application/json:
- schema:
- oneOf:
- - $ref: "#/components/schemas/tenant-configuration-not-found"
- "409":
- description: Conflict
- content:
- application/json:
- schema:
- oneOf:
- - $ref: "#/components/schemas/advisor-phone-number-already-used-problem"
- - $ref: "#/components/schemas/pre-entitlement-phone-number-mismatch"
- - $ref: "#/components/schemas/number-not-available"
- - $ref: "#/components/schemas/number-registration-not-possible"
- "500":
- description: Server error (SMS-Direct Second Number only)
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/no-available-number"
-
- security:
- - sfsAuthentication: []
-
- /api/v1/customer/pre-entitlements/{symphonyId}/externalNetwork/{externalNetwork}:
- post:
- deprecated: true
- tags:
- - Customer pre-entitlements
- summary: (deprecated) Pre-entitle an advisor to a phone number (WhatsApp Direct only)
- operationId: addPreEntitlement
- description: |
- Pre-allocate a phone number to an advisor to allow the advisor to activate their phone number.
- Supported on WhatsApp Direct only
- Umony numbers are not eligible for pre-entitlements. Symphony users using Umony numbers can skip the pre-entitlement step and be entitled directly.
- security:
- - sfsAuthentication: [ ]
- parameters:
- - in: path
- required: true
- name: symphonyId
- schema:
- type: string
- pattern: '^\d+$'
- description: Symphony User Id
- - in: path
- required: true
- name: externalNetwork
- schema:
- type: string
- description: 'External network: WHATSAPP-DIRECT'
- requestBody:
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/pre-entitlement-request'
- responses:
- '200':
- description: The phone number has been successfully allocated to the user.
- '409':
- description: Missing or malformed input
- content:
- application/json:
- schema:
- oneOf:
- - $ref: '#/components/schemas/advisor-already-has-phone-allocated-problem'
- - $ref: '#/components/schemas/phone-number-already-allocated-problem'
- '404':
- description: Not Found
- content:
- application/json:
- schema:
- oneOf:
- - $ref: '#/components/schemas/tenant-configuration-not-found'
- '400':
- description: Missing or malformed input
- content:
- application/json:
- schema:
- oneOf:
- - $ref: '#/components/schemas/symphony-user-not-found-problem'
- - $ref: '#/components/schemas/entitlement-type-not-found-problem'
- - $ref: '#/components/schemas/phone-number-pre-allocation-not-supported-problem'
- '500':
- description: Pre-entitlement Failed
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/pre-entitlement-failed'
- delete:
- deprecated: true
- tags:
- - Customer pre-entitlements
- summary: (deprecated) Remove an advisor pre-entitlement (WhatsApp Direct only)
- operationId: removePreEntitlement
- description: |
- Remove an advisor pre-entitlement
- Supported on WhatsApp Direct only
- security:
- - sfsAuthentication: [ ]
- parameters:
- - in: path
- required: true
- name: symphonyId
- schema:
- type: string
- pattern: '^\d+$'
- description: Symphony User Id
- - in: path
- required: true
- name: externalNetwork
- schema:
- type: string
- description: 'External network: WHATSAPP-DIRECT'
- responses:
- '200':
- description: The pre-entitlement has been removed successfully.
- '404':
- description: Not Found
- content:
- application/json:
- schema:
- oneOf:
- - $ref: '#/components/schemas/tenant-configuration-not-found'
- - $ref: '#/components/schemas/pre-entitlement-not-found'
- '403':
- description: Forbidden
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/advisor-already-entitled'
-
- '400':
- description: Missing or malformed input
- content:
- application/json:
- schema:
- oneOf:
- - $ref: '#/components/schemas/entitlement-type-not-found-problem'
-
- /api/v1/customer/entitlements/externalNetwork/{externalNetwork}/advisors:
- get:
- tags:
- - Entitlements
- summary: List entitled advisors
- description: |
- List all entitled advisors on a given external network.
- operationId: listEntitledAdvisors
- parameters:
- - name: externalNetwork
- in: path
- required: true
- description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
- schema:
- type: string
- example: WHATSAPP
- - name: before
- in: query
- description: The before cursor for pagination
- schema:
- type: string
- - name: after
- in: query
- description: The after cursor for pagination
- schema:
- type: string
- - in: query
- name: listPermissions
- schema:
- type: boolean
- default: false
- required: false
- example: true
- description: Boolean query parameter that indicates whether the search API will return the list of permissions per advisor return, or not
- responses:
- "200":
- description: List of found entitled advisors.
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/entitled-response"
- "401":
- description: Unauthorized
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_401"
- "403":
- description: Operation forbidden
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_403_0"
- security:
- - sfsAuthentication: []
- "/api/v2/customer/advisor/entitlements":
- get:
- tags:
- - Entitlements
- summary: Get an advisor's entitlement (recommended)
- description: |
- Check if a given advisor is entitled for a given external network.
- Advisors can be identified using their email address or their Symphony user ID
- (if both are provided, the Symphony user ID will take precedence)
- operationId: getCustomerEntitlement
- parameters:
- - name: advisorEmailAddress
- in: query
- description: Symphony user email address
- required: false
- schema:
- type: string
- example: william.smith@symphony.com
- - name: advisorSymphonyId
- in: query
- description: Symphony user ID
- required: false
- schema:
- type: string
- example: 12345678912365
- - name: externalNetwork
- in: query
- description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
- required: true
- schema:
- type: string
- example: WHATSAPP
- responses:
- "200":
- description: Advisor data (if an entitled advisor has been found)
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/entitlement-response"
- '400':
- description: Missing or malformed input
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/advisor-id-not-provided'
- "401":
- description: Unauthorized
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_401"
- "403":
- description: Operation forbidden
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_403_0"
- "404":
- description: Entitlement not found (if no entitled advisor matching the parameters has been found)
- content:
- application/json:
- schema:
- oneOf:
- - $ref: "#/components/schemas/entitlement-not-found-problem"
- "500":
- description: No available number
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/no-available-number"
- security:
- - sfsAuthentication: []
- delete:
- tags:
- - Entitlements
- summary: Remove entitlement (recommended)
- description: |
- Removes a given advisor's entitlement for a given external network.
- Advisors can be identified using their email address or their Symphony user ID
- (if both are provided, the Symphony user ID will take precedence)
- operationId: deleteCustomerEntitlement
- parameters:
- - name: advisorEmailAddress
- in: query
- description: Advisor's email address
- required: false
- schema:
- type: string
- example: william.smith@symphony.com
- - name: advisorSymphonyId
- in: query
- description: Symphony user ID
- required: false
- schema:
- type: string
- example: 12345678912365
- - name: externalNetwork
- in: query
- description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
- required: true
- schema:
- type: string
- example: WHATSAPP
- responses:
- "200":
- description: The entitlement has been successfully removed.
- "404":
- description: Entitlement not found
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/entitlement-not-found-problem"
- "401":
- description: Unauthorized
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_401"
- "403":
- description: Operation forbidden
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_403_0"
- security:
- - sfsAuthentication: []
- "/api/v1/customer/entitlements/{symphonyId}/entitlementType/{entitlementType}":
- get:
- deprecated: true
- tags:
- - Entitlements
- summary: Get an advisor's entitlement searching by Symphony user ID for a given external network (deprecated)
- description: |
- Get an advisor's entitlement searching by Symphony user ID for a given external network
- operationId: getCustomerEntitlementBySymphonyId
- parameters:
- - name: symphonyId
- in: path
- description: Symphony user ID
- required: true
- schema:
- type: string
- example: 12345678912365
- - name: entitlementType
- in: path
- description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
- required: true
- schema:
- type: string
- example: WHATSAPP
- responses:
- "200":
- description: Entitlement found
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/entitlement-response"
- "404":
- description: Entitlement not found
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/entitlement-not-found-problem"
- "401":
- description: Unauthorized
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_401"
- "403":
- description: Operation forbidden
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_403_0"
- security:
- - sfsAuthentication: []
- delete:
- deprecated: true
- tags:
- - Entitlements
- summary: Remove an advisor's entitlement by Symphony user ID for a given external network (deprecated)
- description: |
- Remove an advisor's entitlement for a given external network
- operationId: deleteCustomerEntitlementBySymphonyId
- parameters:
- - name: symphonyId
- in: path
- description: Symphony user ID
- required: true
- schema:
- type: string
- example: 12345678912365
- - name: entitlementType
- in: path
- description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
- required: true
- schema:
- type: string
- example: WHATSAPP
- responses:
- "200":
- description: The entitlement has been successfully removed
- "404":
- description: Entitlement not found
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/entitlement-not-found-problem"
- "401":
- description: Unauthorized
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_401"
- "403":
- description: Operation forbidden
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_403_0"
- security:
- - sfsAuthentication: []
-
- "/api/v1/customer/advisors/{advisorSymphonyId}/blockedPhoneNumbers":
- post:
- tags:
- - CustomerBlock
- summary: Block phone numbers
- operationId: blockPhoneNumbers
- description: |
- Block phone numbers for an advisor.
- security:
- - sfsAuthentication: [ ]
- parameters:
- - in: path
- name: advisorSymphonyId
- schema:
- type: string
- pattern: '^\d+$'
- required: true
- description: The symphonyId for which we are blocking the phone numbers
- requestBody:
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/customer-block-phone-numbers-request'
- responses:
- '200':
- description: Request processed
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/customer-block-phone-numbers-response'
- '403':
- description: Forbidden
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/not-entitled-on-direct-emp'
- '404':
- description: Not found
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/advisor-not-found'
- get:
- tags:
- - CustomerBlock
- summary: Get blocked phone numbers
- operationId: getBlockPhoneNumbers
- description: |
- Get blocked phone numbers for an advisor.
- security:
- - sfsAuthentication: [ ]
- parameters:
- - in: path
- name: advisorSymphonyId
- schema:
- type: string
- pattern: '^\d+$'
- required: true
- description: The Symphony ID for which we are getting the blocked phone numbers
- responses:
- '200':
- description: Request processed
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/get-blocked-phone-numbers-response'
- '403':
- description: Forbidden
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/not-entitled-on-direct-emp'
- '404':
- description: Forbidden
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/advisor-not-found'
- delete:
- tags:
- - CustomerBlock
- summary: Unblock phone numbers
- operationId: unblockPhoneNumbers
- description: |
- Unblock phone numbers for an advisor.
- security:
- - sfsAuthentication: [ ]
- parameters:
- - in: path
- name: advisorSymphonyId
- schema:
- type: string
- pattern: '^\d+$'
- required: true
- description: The Symphony ID for which we are unblocking the phone numbers
- - in: query
- name: phoneNumbers
- schema:
- type: array
- items:
- type: string
- format: phone
- minItems: 1
- maxItems: 100
- required: true
- description: The phone numbers that we want to unblock for the specified advisor
- responses:
- '200':
- description: Request processed
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/customer-block-phone-numbers-response'
- '403':
- description: Forbidden
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/not-entitled-on-direct-emp'
- '404':
- description: Not found
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/advisor-not-found'
-
- "/api/v2/customer/advisors/{advisorSymphonyId}/blockedPhoneNumbers":
- post:
- tags:
- - CustomerBlock
- summary: Block phone numbers (recommended)
- operationId: blockPhoneNumbersv2
- description: |
- Block phone numbers for an advisor.
- security:
- - sfsAuthentication: [ ]
- parameters:
- - in: path
- name: advisorSymphonyId
- schema:
- type: string
- pattern: '^\d+$'
- required: true
- description: The symphonyId for which we are blocking the phone numbers
- requestBody:
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/customer-block-phone-numbers-request'
- responses:
- '200':
- description: Request processed
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/customer-block-phone-numbers-response'
- '403':
- description: Forbidden
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/not-entitled-on-direct-emp'
- '404':
- description: Not found
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/advisor-not-found'
- get:
- tags:
- - CustomerBlock
- summary: Get blocked phone numbers (recommended)
- operationId: getBlockPhoneNumbersv2
- description: |
- Get blocked phone numbers for an advisor.
- security:
- - sfsAuthentication: [ ]
- parameters:
- - in: path
- name: advisorSymphonyId
- schema:
- type: string
- pattern: '^\d+$'
- required: true
- description: The Symphony ID for which we are getting the blocked phone numbers
- responses:
- '200':
- description: Request processed
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/get-blocked-phone-numbers-response'
- '403':
- description: Forbidden
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/not-entitled-on-direct-emp'
- '404':
- description: Forbidden
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/advisor-not-found'
- delete:
- tags:
- - CustomerBlock
- summary: Unblock phone numbers (recommended)
- operationId: unblockPhoneNumbersv2
- description: |
- Unblock phone numbers for an advisor.
- security:
- - sfsAuthentication: [ ]
- parameters:
- - in: path
- name: advisorSymphonyId
- schema:
- type: string
- pattern: '^\d+$'
- required: true
- description: The Symphony ID for which we are unblocking the phone numbers
- responses:
- '200':
- description: Request processed
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/customer-block-phone-numbers-response'
- '403':
- description: Forbidden
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/not-entitled-on-direct-emp'
- '404':
- description: Not found
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/advisor-not-found'
-
- "/api/v2/customer/contacts/{contactSymphonyId}/advisor/{advisorSymphonyId}":
- delete:
- tags:
- - Contact
- summary: Remove contact (recommended)
- description: |
- Remove an advisor's contact searching by the advisor's Symphony user ID and the contact's Symphony user ID
- operationId: deleteContactv2
- parameters:
- - name: advisorSymphonyId
- in: path
- description: Advisor's Symphony user ID
- required: true
- schema:
- type: string
- format: number
- example: 1234567890
- - name: contactSymphonyId
- in: path
- description: Contact's Symphony user ID
- required: true
- schema:
- type: string
- format: number
- example: 1234567890
- responses:
- "204":
- description: Contact successfully removed
- "404":
- description: Contact not found
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/contact-not-found"
- "401":
- description: Unauthorized
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_401"
- security:
- - sfsAuthentication: []
- "/api/v1/customer/contacts/advisorEmailAddress/{advisorEmailAddress}/contactEmailAddress/{contactEmailAddress}/externalNetwork/{externalNetwork}":
- delete:
- deprecated: true
- tags:
- - Contact
- summary: Remove an advisor's contact (deprecated)
- description: |
- Remove an advisor's contact searching by the advisor's email address and the contact's email address for a given external network.
- operationId: deleteContact
- parameters:
- - name: advisorEmailAddress
- in: path
- description: Advisor's email address
- required: true
- schema:
- type: string
- format: email
- example: william.smith@symphony.com
- - name: contactEmailAddress
- in: path
- description: Contact's email address
- required: true
- schema:
- type: string
- format: email
- example: johndoe@symphony.com
- - name: externalNetwork
- in: path
- description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
- required: true
- schema:
- type: string
- example: WHATSAPP
- responses:
- "204":
- description: Contact successfully removed
- "404":
- description: Contact not found
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/contact-not-found"
- "401":
- description: Unauthorized
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_401"
- "403":
- description: Operation forbidden
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_403_0"
- security:
- - sfsAuthentication: []
- "/api/v2/customer/contacts/{contactSymphonyId}":
- delete:
- tags:
- - Contact
- summary: Remove the contact from all advisors they are connected to for a given external network (recommended)
- description: |
- Remove the contact from all the advisors they are connected to for a given external network.
- operationId: deleteContactsBySymphonyIdAndExternalNetworkv2
- parameters:
- - name: contactSymphonyId
- in: path
- description: Contact's Symphony user ID
- required: true
- schema:
- type: string
- format: number
- example: 1234567890
- responses:
- "200":
- description: Contact found. The response includes a status report (SUCCESS or FAILURE) of the connection removal for each advisors initially connected to the contact.
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/customer-contactsWithId-responsev2"
- "404":
- description: Contact not found
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/contact-not-found"
- "401":
- description: Unauthorized
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_401"
- "403":
- description: Operation forbidden
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_403_0"
- security:
- - sfsAuthentication: []
- put:
- tags:
- - Contact
- summary: Update contact (recommended)
- description: |
- Update a contact's first name, last name, company name (maximum 100 characters) and, if the advisor has the permission for this, the contact's email address for a given external network.
- Note: Updating a contact's phone number is not supported.
- # to be validated
The "advisorEmailAddress" is the email address of the advisor who 1st onboarded the contact.
- operationId: updateContactsv2
- parameters:
- - name: contactSymphonyId
- in: path
- description: Contact's Symphony user ID
- required: true
- schema:
- type: string
- example: 1234567890
- requestBody:
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/customer-update-contacts-requestv2"
- responses:
- "200":
- description: Contact successfully updated
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/update-contacts-response-v2"
- "400":
- description: Missing or malformed input
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/external-network-not-found"
- "401":
- description: Unauthorized
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_401"
- "403":
- description: Update user forbidden
- content:
- application/json:
- schema:
- oneOf:
- - $ref: "#/components/schemas/inline_response_403_1"
- - $ref: "#/components/schemas/inline_response_403_0"
- - $ref: "#/components/schemas/cannot-edit-advisor-own-contact-email"
- "404":
- description: Contact not found
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_404_4"
- "409":
- description: Conflict
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/user-already-exists"
- "500":
- description: Contact update failed
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/update-account-failed"
- security:
- - sfsAuthentication: []
- "/api/v1/customer/contacts/{contactSymphonyId}/copy":
- post:
- tags:
- - Contact
- summary: Copy contact
- description: |
- Create a new contact copy.
- Some contacts might be shared between tenants. Shared contacts updates are not allowed.
- This API allows to create a contact copy that is dedicated for the requesting tenant and that can be updated.
-
- Contacts that are created starting from the 23.03 release are already not shared between tenants. This API is dedicated for shared contacts created prior to the 23.03 release.
-
- Please note:
-
- - A new account is created for the user, with a new Symphony user ID.
- - There is no change in the user's data.
- - The original user account is removed from all rooms and the new account is added to these rooms. Then, a system message is pushed to each room: Maintenance completed on account: {contact first name} {contact last name}. No action on your part is required.
- - The email format of the user will appear differently in Content Export. Old format: {network}.{phone}@symphony.com. New format: {network}.{phone}.{tenantId}@symphony.com
- - This API is only supported for WHATSAPP and SMS contacts.
- - Users who are still part of Symphony IMs cannot be copied. IMs should be first removed from Federation Services.
- - The copy action is not required for users onboarded by a single tenant before the 23.03 release, or for all users onboarded after 23.03 release.
-
- operationId: copyContact
- parameters:
- - name: contactSymphonyId
- in: path
- description: Contact's Symphony ID
- required: true
- schema:
- type: string
- pattern: '^\d+$'
- example: 1234567890
- responses:
- "200":
- description: Contact successfully copied
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/copy-contact-response"
- "400":
- description: Missing or malformed input
- content:
- application/json:
- schema:
- oneOf:
- - $ref: "#/components/schemas/user-copy-not-supported-for-network"
- "403":
- description: Copy user forbidden
- content:
- application/json:
- schema:
- oneOf:
- - $ref: '#/components/schemas/forbidden-entitlement-type'
- - $ref: '#/components/schemas/user-copy-not-supported-for-ims'
- "404":
- description: Contact not found
- content:
- application/json:
- schema:
- oneOf:
- - $ref: "#/components/schemas/contact-not-found"
- '409':
- description: Conflict
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/current-tenant-has-own-user-copy'
- "500":
- description: Contact update failed
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/copy-contact-failed"
- security:
- - sfsAuthentication: []
- "/api/v1/customer/contacts/contactEmailAddress/{contactEmailAddress}/externalNetwork/{externalNetwork}":
- delete:
- deprecated: true
- tags:
- - Contact
- summary: Remove the contact from all advisors they are connected to for a given external network (deprecated)
- description: |
- Removes the contact from all the advisors they are connected to, searching by the contact's email address and the external network. This operation will only affect the tenant's advisors.
- operationId: deleteContactsByEmailAndExternalNetwork
- parameters:
- - name: contactEmailAddress
- in: path
- description: Contact's email address
- required: true
- schema:
- type: string
- format: email
- example: johndoe@symphony.com
- - name: externalNetwork
- in: path
- description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
- required: true
- schema:
- type: string
- example: WHATSAPP
- responses:
- "200":
- description: Contact found. The response includes a status report (SUCCESS or FAILURE) of the connection removal for each advisor initially connected to the contact.
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/customer-contactsWithId-response"
- "404":
- description: Contact not found
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/contact-not-found"
- "401":
- description: Unauthorized
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_401"
- "403":
- description: Operation forbidden
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_403_0"
- security:
- - sfsAuthentication: []
- /api/v2/customer/contacts/removal:
- post:
- tags:
- - Contact
- summary: Bulk remove advisor-contact connection (recommended)
- description: |
- Remove specific advisor-contact connections in bulk.
- operationId: deleteContactsv2
- requestBody:
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/deleteContacts-requestv2"
- responses:
- "200":
- description: Contacts found. The response includes a status report (SUCCESS, NOT_FOUND or FAILURE) of the connection removal for each advisor initially connected to each contact in the array of objects.
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/deleteContacts-responsev2"
- "401":
- description: Unauthorized
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_401"
- "403":
- description: Operation forbidden
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_403_0"
- security:
- - sfsAuthentication: []
- /api/v1/customer/contacts/removal:
- post:
- deprecated: true
- tags:
- - Contact
- summary: Remove specific advisor-contact connections in bulk (deprecated)
- description: |
- Bulk remove the connections between advisor-contact pairs. Takes in the body of the request an array of objects composed of advisor's email address, contact's email address and external network.
- operationId: deleteContacts
- requestBody:
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/deleteContacts-request"
- responses:
- "200":
- description: Contacts found. The response includes a status report (SUCCESS or FAILURE) of the connection removal for each advisor initially connected to each contact in the array of objects.
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/deleteContacts-response"
- "401":
- description: Unauthorized
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_401"
- "403":
- description: Operation forbidden
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_403_0"
- security:
- - sfsAuthentication: []
- "/api/v2/customer/contacts/advisor/{advisorSymphonyId}":
- delete:
- tags:
- - Contact
- summary: Remove all contacts (recommended)
- description: |
- Removes all contacts of an advisor matching the advisor's Symphony user ID.
- operationId: deleteAdvisorContactsv2
- parameters:
- - name: advisorSymphonyId
- in: path
- description: Advisor's Symphony user ID
- required: true
- schema:
- type: string
- format: number
- example: 1234567890
- responses:
- "200":
- description: Call completed - Report provided with the list of SUCCESSFUL and FAILED operations
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/customer-deleteAdvisorContacts-responsev2"
- "404":
- description: Advisor or contact not found
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_404_1"
- "401":
- description: Unauthorized
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_401"
- "403":
- description: Operation forbidden
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_403_0"
- security:
- - sfsAuthentication: []
- "/api/v1/customer/contacts/advisorEmailAddress/{advisorEmailAddress}":
- delete:
- deprecated: true
- tags:
- - Contact
- summary: Removes all contacts of a given advisor (deprecated)
- description: |
- Removes all the contacts of an advisor matching the advisor's email address.
- operationId: deleteAdvisorContacts
- parameters:
- - name: advisorEmailAddress
- in: path
- description: Advisor's email address
- required: true
- schema:
- type: string
- example: william.smith@symphony.com
- responses:
- "200":
- description: Call completed - Report provided with the list of SUCCESSFUL and FAILED operations
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/deleteContacts-response"
- "404":
- description: Advisor or contact not found
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_404_1"
- "401":
- description: Unauthorized
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_401"
- "403":
- description: Operation forbidden
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_403_0"
- security:
- - sfsAuthentication: []
-
-
- /api/v1/customer/permissions:
- get:
- tags:
- - Permissions
- summary: List permissions
- description: |
- List of available permissions for the external network at "CONNECT-DOMAIN"
- operationId: listPermissions
- responses:
- "200":
- description: List of permissions found
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/permissions-response"
- "401":
- description: Unauthorized
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_401"
- "403":
- description: Operation forbidden
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_403_0"
- security:
- - sfsAuthentication: []
- /api/v1/customer/externalNetwork/{externalNetwork}/permissions:
- get:
- tags:
- - Permissions
- summary: List EMP Permissions
- operationId: listEmpPermissions
- description: |
- List all permissions available for the external network at "CONNECT-DOMAIN"
- For each permission, returns id, name and whether they are set by default or not
- parameters:
- - name: externalNetwork
- in: path
- description: The external network.
- required: true
- schema:
- type: string
- example: "WHATSAPP"
- responses:
- "200":
- description: List of EMP permissions found
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/enhanced-permissions-response"
- security:
- - sfsAuthentication: [ ]
- "/api/v2/customer/advisors/{advisorSymphonyId}/externalNetwork/{externalNetwork}/permissions":
- get:
- tags:
- - Permissions
- summary: List advisor's permissions (recommended)
- description: |
- List the permissions granted to an advisor on an external network.
- operationId: listAdvisorPermissionsBySymphonyId
- parameters:
- - name: advisorSymphonyId
- in: path
- description: Advisor's Symphony user ID
- required: true
- schema:
- type: string
- example: 1234567890
- - name: externalNetwork
- in: path
- description: "The external network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
- required: true
- schema:
- type: string
- example: WHATSAPP
- responses:
- "200":
- description: List of advisor's permissions
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/advisor-permissions-response"
- "404":
- description: Advisor not found
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/advisor-not-found"
- "401":
- description: Unauthorized
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_401"
- "403":
- description: Operation forbidden
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_403_0"
- security:
- - sfsAuthentication: []
- post:
- tags:
- - Permissions
- summary: Add permission to an advisor (recommended)
- description: |
- Grant permission to an advisor. \
- Refer to the Permissions table on the Authentication page for the default permissions. \
- For multi-company contacts, the contacts must be from the same network, e.g. all from WeChat or all from WhatsApp. Cross-network rooms are not authorized.
- operationId: addPermissionBySymphonyId
- parameters:
- - name: advisorSymphonyId
- in: path
- description: Advisor's Symphony user ID
- required: true
- schema:
- type: string
- example: 1234567890
- - name: externalNetwork
- in: path
- description: The external network
- required: true
- schema:
- type: string
- requestBody:
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/advisor-permission-request"
- responses:
- "200":
- description: Permission successfully added to the advisor
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/advisor-permission-response"
- "404":
- description: Not found
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_404_2"
- "409":
- description: Conflict
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/permission-already-assigned"
- "401":
- description: Unauthorized
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_401"
- "403":
- description: Operation forbidden
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_403_0"
- security:
- - sfsAuthentication: []
- "/api/v1/customer/advisors/advisorEmailAddress/{advisorEmailAddress}/externalNetwork/{externalNetwork}/permissions":
- get:
- deprecated: true
- tags:
- - Permissions
- summary: List advisor's permissions (deprecated)
- description: |
- List an advisor's permissions.
- operationId: listAdvisorPermissionsByEmail
- parameters:
- - name: advisorEmailAddress
- in: path
- description: Advisor's email address
- required: true
- schema:
- type: string
- example: william.smith@symphony.com
- - name: externalNetwork
- in: path
- description: "The external network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
- required: true
- schema:
- type: string
- example: WHATSAPP
- responses:
- "200":
- description: List of advisor's permissions
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/advisor-permissions-response"
- "404":
- description: Advisor not found
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/advisor-not-found"
- "401":
- description: Unauthorized
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_401"
- "403":
- description: Operation forbidden
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_403_0"
- security:
- - sfsAuthentication: []
- post:
- deprecated: true
- tags:
- - Permissions
- summary: Add permission to an advisor (deprecated)
- description: |
- Grant permission to an advisor. \
- Refer to the Permissions table on the Authentication page for the default permissions. \
- For multi-company contacts, the contacts must be from the same network, e.g. all from WeChat or all from WhatsApp. Cross-network rooms are not authorized.
- operationId: addPermissionByEmail
- parameters:
- - name: advisorEmailAddress
- in: path
- description: Advisor's email address
- required: true
- schema:
- type: string
- - name: externalNetwork
- in: path
- description: The external network
- required: true
- schema:
- type: string
- requestBody:
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/advisor-permission-request"
- responses:
- "200":
- description: Permission successfully added to the advisor
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/advisor-permission-response"
- "404":
- description: Not found
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_404_2"
- "409":
- description: Conflict
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/permission-already-assigned"
- "401":
- description: Unauthorized
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_401"
- "403":
- description: Operation forbidden
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_403_0"
- security:
- - sfsAuthentication: []
-
- "/api/v2/customer/advisors/{advisorSymphonyId}/externalNetwork/{externalNetwork}/permissions/{permissionName}":
- delete:
- tags:
- - Permissions
- summary: Remove permission (recommended)
- description: Remove a permission from an advisor.
- operationId: removePermissionBySymphonyIdv2
- parameters:
- - name: advisorSymphonyId
- in: path
- description: Advisor's Symphony user ID
- required: true
- schema:
- type: string
- - name: externalNetwork
- in: path
- description: The external network
- required: true
- schema:
- type: string
- - name: permissionName
- in: path
- description: permissionName to remove
- required: true
- schema:
- type: string
- responses:
- "204":
- description: Permission successfully removed
- "404":
- description: Advisor not found
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_404_3"
- "401":
- description: Unauthorized
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_401"
- "403":
- description: Operation forbidden
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_403_0"
- security:
- - sfsAuthentication: []
- "/api/v1/customer/advisors/advisorEmailAddress/{advisorEmailAddress}/externalNetwork/{externalNetwork}/permissions/{permissionName}":
- delete:
- deprecated: true
- tags:
- - Permissions
- summary: Remove permission from an advisor (deprecated)
- description: Remove a permission from an advisor.
- operationId: removePermissionByEmail
- parameters:
- - name: advisorEmailAddress
- in: path
- description: Advisor's email address
- required: true
- schema:
- type: string
- - name: externalNetwork
- in: path
- description: The external network
- required: true
- schema:
- type: string
- - name: permissionName
- in: path
- description: permissionName to remove
- required: true
- schema:
- type: string
- responses:
- "200":
- description: Permission removed successfully
- "404":
- description: Advisor not found
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_404_3"
- "401":
- description: Unauthorized
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_401"
- "403":
- description: Operation forbidden
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_403_0"
- security:
- - sfsAuthentication: []
-
- /api/v2/customer/advisors/permissions:
- post:
- tags:
- - Permissions
- summary: Add a permission to multiple advisors (recommended)
- description: "Grant permission to multiple advisors."
- operationId: addPermissionToMultipleAdvisor
- requestBody:
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/advisors-permission-requestv2"
- responses:
- "200":
- description: Permission successfully added to the advisor
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/multiple-advisor-permission-response"
- "404":
- description: Not found
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_404_2"
- "409":
- description: Conflict
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/permission-already-assigned"
- "401":
- description: Unauthorized
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_401"
- "403":
- description: Operation forbidden
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_403_0"
- security:
- - sfsAuthentication: []
- /api/v1/customer/advisors/permissions:
- post:
- deprecated: true
- tags:
- - Permissions
- summary: Add permission to multiple advisors (deprecated)
- description: "Add a permission to multiple advisors."
- operationId: addPermissionToMultipleAdvisorByEmail
- requestBody:
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/advisors-permission-request"
- responses:
- "200":
- description: Permission successfully added to the advisor
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/multiple-advisor-permission-response"
- "404":
- description: Not found
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_404_2"
- "409":
- description: Conflict
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/permission-already-assigned"
- "401":
- description: Unauthorized
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_401"
- "403":
- description: Operation forbidden
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_403_0"
- security:
- - sfsAuthentication: []
-
- # delete:
- # tags:
- # - Permissions
- # summary: Remove permission from multiple advisors
- # description: |
- # => Remove a permission from multiple advisors. **This endpoint will return an error 400**
- # operationId: removePermissionFromMultipleAdvisorByEmail
- # requestBody:
- # content:
- # application/json:
- # schema:
- # $ref: '#/components/schemas/advisor-permission-request'
- # responses:
- # '200':
- # description: Request has been processed
- # content:
- # application/json:
- # schema:
- # $ref: '#/components/schemas/multiple-advisor-permission-response'
- # '400':
- # description: Request was not well formed
- # content:
- # application/json:
- # schema:
- # $ref: '#/components/schemas/inline_response_400'
- # '401':
- # description: Unauthorized
- # content:
- # application/json:
- # schema:
- # $ref: '#/components/schemas/inline_response_401'
- # '403':
- # description: Operation forbidden
- # content:
- # application/json:
- # schema:
- # $ref: '#/components/schemas/inline_response_403_0'
- # security:
- # - sfsAuthentication: []
- # '/api/v1/customer/advisors/advisorEmailAddress/{advisorEmailAddress}/permissions':
- # post:
- # tags:
- # - Permissions
- # summary: Add permission to an advisor for all external networks
- # description: => Add a permission to an advisor for all external networks.
- # operationId: addPermissionForAllEnsByEmail
- # parameters:
- # - name: advisorEmailAddress
- # in: path
- # description: Advisor's email address
- # required: true
- # schema:
- # type: string
- # example: william.smith@symphony.com
- # requestBody:
- # content:
- # application/json:
- # schema:
- # $ref: '#/components/schemas/advisor-permission-request'
- # responses:
- # '200':
- # description: Operation completed
- # content:
- # application/json:
- # schema:
- # $ref: '#/components/schemas/bulk-advisor-permission-response'
- # '404':
- # description: Not found
- # content:
- # application/json:
- # schema:
- # $ref: '#/components/schemas/inline_response_404_2'
- # '401':
- # description: Unauthorized
- # content:
- # application/json:
- # schema:
- # $ref: '#/components/schemas/inline_response_401'
- # '403':
- # description: Operation forbidden
- # content:
- # application/json:
- # schema:
- # $ref: '#/components/schemas/inline_response_403_0'
- # security:
- # - sfsAuthentication: []
- /api/v2/customer/contacts:
- post:
- tags:
- - Contact
- summary: Add a contact and/or advisors to a contact (recommended)
- description: |
- Add a contact and/or advisor(s) to the contact.
- This end point can be called in 2 situations:
-
- - To create a contact and eventually immediately associate one or more advisors.
- - To add more advisors to an existing contact.
-
- In both cases, you must provide all the contact's mandatory fields listed as "body params".
-
- **Note**
-
-
- - If both advisorSymphonyId and advisorEmailAddresses are passed, the advisorSymphonyId will prevail.
-
- operationId: addContact
- requestBody:
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/customer-contact-request"
- responses:
- "200":
- description: Contact added successfully
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/add-contact-response"
- "400":
- description: Missing or malformed input
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_400_1"
- "403":
- description: Onboard user forbidden
- content:
- application/json:
- schema:
- oneOf:
- - $ref: "#/components/schemas/inline_response_403"
- - $ref: "#/components/schemas/inline_response_403_0"
- - $ref: '#/components/schemas/user-id-mismatch'
- - $ref: '#/components/schemas/phone-international-onboarding-forbidden'
- "401":
- description: Unauthorized
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_401"
- "404":
- description: Not found
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/tenant-configuration-not-found"
- "409":
- description: Conflict
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_409"
- "500":
- description: User creation failed
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/create-account-failed"
- security:
- - sfsAuthentication: []
- get:
- tags:
- - Search
- summary: List contacts (recommended)
- description: |
- List contacts, can query by emailAddress, phoneNumber or by contactSymphonyId or by advisorSymphonyId.
- If the advisor has the admin:list-customers permission, they will be able to retrieve all pod contacts for a given externalNetwork, or to see other advisor's list of contacts.
- operationId: listContacts2
- parameters:
- - name: externalNetwork
- in: query
- description: "The external network: WHATSAPP, SMS, WECHAT, SMS-DIRECT, LINE or WHATSAPP-DIRECT"
- required: true
- schema:
- minLength: 1
- type: string
- example: WHATSAPP
- - name: emailAddress
- in: query
- description: Contact's email address
- required: false
- schema:
- type: string
- format: email
- example: johndoe@symphony.com
- - name: phoneNumber
- in: query
- description: Contact's phone number
- required: false
- schema:
- type: string
- format: phone
- example: +33 1 23 45 67 89
- - name: symphonyId
- in: query
- description: Contact's Symphony user ID
- required: false
- schema:
- type: string
- pattern: '^\d+$'
- example: 1234567890
- - name: advisorSymphonyId
- in: query
- description: The advisor's Symphony ID
- required: false
- schema:
- type: string
- pattern: '^\d+$'
- example: 1234567890
- - name: phoneBlocked
- in: query
- description: Filter only available or blocked contact's phones
- required: false
- schema:
- type: string
- enum:
- - "all"
- - "false"
- - "true"
- default: all
- - name: before
- in: query
- description: The before cursor for pagination
- required: false
- schema:
- type: string
- - name: after
- in: query
- description: The after cursor for pagination
- required: false
- schema:
- type: string
- responses:
- "200":
- description: Contact found
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/list-contact-response"
- "404":
- description: Contact or tenant not found
- content:
- application/json:
- schema:
- oneOf:
- - $ref: '#/components/schemas/contact-not-found'
- - $ref: '#/components/schemas/tenant-not-found'
- "401":
- description: Unauthorized
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_401"
- "403":
- description: Operation forbidden
- content:
- application/json:
- schema:
- oneOf:
- - $ref: "#/components/schemas/inline_response_403_0"
- - $ref: '#/components/schemas/user-id-mismatch'
- security:
- - sfsAuthentication: []
-
- /api/v1/customer/contacts:
- get:
- deprecated: true
- tags:
- - Search
- summary: Find a contact (deprecated)
- description: |
- Find a contact searching by email address and external network
- operationId: findContacts
- parameters:
- - name: externalNetwork
- in: query
- description: "The external network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
- required: true
- schema:
- minLength: 1
- type: string
- example: WHATSAPP
- - name: emailAddress
- in: query
- description: Contact's email address
- required: true
- schema:
- type: string
- format: email
- example: johndoe@symphony.com
- responses:
- "200":
- description: Contact found
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/find-contact-response"
- "404":
- description: Contact not found
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/contact-not-found"
- "401":
- description: Unauthorized
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_401"
- "403":
- description: Operation forbidden
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_403_0"
- security:
- - sfsAuthentication: []
- "/api/v1/customer/contacts/{contactEmailAddress}/update":
- post:
- deprecated: true
- tags:
- - Contact
- summary: Update Contact (deprecated)
- description: |
- Update the first name, last name, company name (maximum 100 characters long) of a contact for a given external network.
-
Updating the contact's email address or phone number is not supported.
- # to be validated
the "advisorEmailAddress" is the email address of the advisor that first onboarded the contact.
- operationId: updateContacts
- parameters:
- - name: contactEmailAddress
- in: path
- description: Contact's email address
- required: true
- schema:
- type: string
- example: johndoe@symphony.com
- requestBody:
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/customer-update-contacts-request"
- responses:
- "200":
- description: Contact successfully updated
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/update-contacts-response"
- "400":
- description: Missing or malformed input
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/external-network-not-found"
- "403":
- description: Update user forbidden
- content:
- application/json:
- schema:
- oneOf:
- - $ref: "#/components/schemas/inline_response_403_1"
- - $ref: "#/components/schemas/inline_response_403_0"
- - $ref: "#/components/schemas/cannot-edit-advisor-own-contact-email"
- "401":
- description: Unauthorized
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_401"
- "404":
- description: Contact not found
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_404_4"
- "500":
- description: Contact update failed
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/update-account-failed"
- security:
- - sfsAuthentication: []
- /api/v1/customer/advisors:
- get:
- deprecated: true
- tags:
- - Search
- summary: Search for an advisor (deprecated)
- description: |
- Search for an advisor by email address or Symphony user ID and external network.
- operationId: findAdvisor
- parameters:
- - name: externalNetwork
- in: query
- description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
- required: true
- schema:
- minLength: 1
- type: string
- example: WHATSAPP
- - name: advisorEmailAddress
- in: query
- description: Advisor's email address
- required: false
- schema:
- type: string
- format: email
- example: william.smith@symphony.com
- - name: advisorSymphonyId
- in: query
- description: Advisor's Symphony user ID
- required: false
- schema:
- type: string
- format: email
- example: 1234567890
- responses:
- "200":
- description: Advisor found
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/entitlement-response"
- "404":
- description: Advisor not found (Advisor may not be entitled for this external network)
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_404_5"
- "401":
- description: Unauthorized
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_401"
- "403":
- description: Operation forbidden
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_403_0"
- security:
- - sfsAuthentication: []
-
- "/api/v2/customer/contact":
- get:
- tags:
- - Search
- summary: Get contact
- description: |
- Get a contact searching by their phone number, their external network and, optionally, their advisor's federation group.
- operationId: getContact
- parameters:
- - in: query
- name: phoneNumber
- description: contact's phone number
- schema:
- type: string
- format: phone
- required: true
- - in: query
- name: externalNetwork
- description: contact's external network
- schema:
- type: string
- required: true
- - in: query
- name: federationGroupId
- description: contact's federationGroupId
- schema:
- type: string
- responses:
- '200':
- description: Contact found
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/find-contact-response-v2'
- '400':
- description: Bad Request
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/external-network-not-found'
- '404':
- description: Not found
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/inline_response_404_6'
- security:
- - sfsAuthentication: []
-
- "/api/v2/customer/contacts/{contactSymphonyId}/advisors":
- get:
- tags:
- - Search
- summary: List a contact’s advisors (recommended)
- description: |
- Search for the advisors of a provided contact email address for a given external network.
- operationId: findAdvisorsv2
- parameters:
- - name: contactSymphonyId
- in: path
- description: The Contact's Symphony user ID
- required: true
- schema:
- type: string
- format: number
- example: 1234567890
- - in: query
- name: before
- schema:
- type: string
- description: The before cursor for pagination
- - in: query
- name: after
- schema:
- type: string
- description: The after cursor for pagination
- responses:
- "200":
- description: List of advisor(s) found
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/advisors-search-response"
- "404":
- description: Contact not found
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_404_6"
- "401":
- description: Unauthorized
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_401"
- "403":
- description: Operation forbidden
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_403_0"
- security:
- - sfsAuthentication: []
-
- "/api/v1/customer/contacts/externalNetwork/{externalNetwork}/search":
- get:
- tags:
- - CustomerContact
- summary: Search contacts
- operationId: searchContacts
- description: >
- => Search an advisor's contacts related to a given externalNetwork
- security:
- - sfsAuthentication: [ ]
- parameters:
- - in: path
- name: externalNetwork
- schema:
- type: string
- required: true
- example: WHATSAPP
- - in: query
- name: query
- required: true
- schema:
- type: string
- description: Start search by first name, then last name and then display name
- example: o
- responses:
- "200":
- description: List of contacts found
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/search-contacts-response"
-
- "/api/v1/customer/contacts/contactEmailAddress/{contactEmailAddress}/externalNetwork/{externalNetwork}/advisors":
- get:
- deprecated: true
- tags:
- - Search
- summary: Search the advisors of a contact (deprecated)
- description: |
- Search for the advisors of a provided contact email address for a given external network.
- operationId: findAdvisors
- parameters:
- - name: externalNetwork
- in: path
- description: "The external network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
- required: true
- schema:
- minLength: 1
- type: string
- example: WHATSAPP
- - name: contactEmailAddress
- in: path
- description: Contact's email address
- required: true
- schema:
- type: string
- format: email
- example: johndoe@symphony.com
- responses:
- "200":
- description: List of advisor(s) found
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/advisors-search-response"
- "404":
- description: Contact not found
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_404_6"
- "401":
- description: Unauthorized
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_401"
- "403":
- description: Operation forbidden
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_403_0"
- security:
- - sfsAuthentication: []
-
- "/api/v1/customer/advisors/{advisorSymphonyId}/externalNetwork/{externalNetwork}/contacts":
- get:
- tags:
- - Search
- summary: List an advisor's contacts (recommended)
- description: |
- Search for the contacts associated with the provided advisor’s Symphony user ID for a given external network.
- operationId: findContactsOfAdvisorv2
- parameters:
- - name: externalNetwork
- in: path
- description: "The external network: WHATSAPP, SMS, WECHAT, SMS-DIRECT, LINE or WHATSAPP-DIRECT"
- required: true
- schema:
- minLength: 1
- type: string
- example: WHATSAPP
- - name: advisorSymphonyId
- in: path
- description: Advisor's Symphony user ID
- required: true
- schema:
- type: string
- format: number
- example: 1234567890
- - in: query
- name: before
- schema:
- type: string
- description: The before cursor for pagination
- - in: query
- name: after
- schema:
- type: string
- description: The after cursor for pagination
- responses:
- "200":
- description: List of contacts(s) found
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/contacts-response"
- "404":
- description: Advisor not found
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_404_5"
- "401":
- description: Unauthorized
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_401"
- "403":
- description: Operation forbidden
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_403_0"
- security:
- - sfsAuthentication: []
- "/api/v1/customer/advisors/advisorEmailAddress/{advisorEmailAddress}/externalNetwork/{externalNetwork}/contacts":
- get:
- deprecated: true
- tags:
- - Search
- summary: Search an advisor's contacts (deprecated)
- description: |
- Search for contacts associated with the advisor whose email address is provided for a given external network.
- operationId: findContactsOfAdvisor
- parameters:
- - name: externalNetwork
- in: path
- description: "The external network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
- required: true
- schema:
- minLength: 1
- type: string
- example: WHATSAPP
- - name: advisorEmailAddress
- in: path
- description: Advisor's email address
- required: true
- schema:
- type: string
- format: email
- example: william.smith@symphony.com
- responses:
- "200":
- description: List of contacts(s) found
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/contacts-response"
- "404":
- description: Advisor not found
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_404_5"
- "401":
- description: Unauthorized
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_401"
- "403":
- description: Operation forbidden
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_403_0"
- security:
- - sfsAuthentication: []
-
- /api/v2/customer/rooms:
- get:
- tags:
- - Room
- summary: List an advisor's rooms (recommended)
- description: |
- List all rooms where an advisor is either a member or an owner for a given network.
- Search is performed with the advisor's Symphony user ID.
- This end point returns at most 25 records per page.
- operationId: listRoomsv2
- parameters:
- - name: advisorSymphonyId
- in: query
- description: Advisor's Symphony user ID
- required: true
- schema:
- type: string
- format: number
- example: 1234567890
- - name: externalNetwork
- in: query
- description: "The external network: WECHAT or WHATSAPP or WHATSAPP-DIRECT or SMS or SMS-DIRECT or LINE"
- required: true
- schema:
- type: string
- example: WHATSAPP
- - name: owner
- in: query
- description:
- If set to "true", lists the rooms where the advisor is an owner.
- If set to "false", lists the rooms where the advisor is an owner and the rooms where the advisor is only a member.
- schema:
- type: boolean
- default: true
- - name: before
- in: query
- description: The before cursor for pagination
- schema:
- type: string
- - name: after
- in: query
- description: The after cursor for pagination
- schema:
- type: string
- responses:
- "200":
- description: List of rooms found
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/rooms-response"
- "400":
- description: Missing or malformed parameter
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/invalid-page-cursor"
- "401":
- description: Unauthorized
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_401"
- "403":
- description: Operation forbidden
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_403_0"
- '404':
- description: Not found
- content:
- application/json:
- schema:
- oneOf:
- - $ref: '#/components/schemas/tenant-configuration-not-found'
- - $ref: '#/components/schemas/advisor-not-found'
- security:
- - sfsAuthentication: []
- post:
- tags:
- - Room
- summary: Create room (recommended)
- description: |
- Create a room with the advisor whose Symphony user ID is provided.
- The advisor is set as a member.
- "externalNetworkRoomDisplayName" applies for WeChat only.
- operationId: createRoomv2
- requestBody:
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/room-requestv2"
- responses:
- "200":
- description: Room created successfully
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/room-creation-response-v2"
- "400":
- description: Bad request
- content:
- application/json:
- schema:
- oneOf:
- - $ref: "#/components/schemas/inline_response_400_2"
- - $ref: "#/components/schemas/incompatible-external-network-and-request-body"
- "403":
- description: Forbidden
- content:
- application/json:
- schema:
- oneOf:
- - $ref: "#/components/schemas/inline_response_403_2"
- - $ref: "#/components/schemas/inline_response_403_0"
- - $ref: "#/components/schemas/federation-group-emp-forbidden"
- - $ref: '#/components/schemas/user-id-mismatch'
- "401":
- description: Unauthorized
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_401"
- "404":
- description: Advisor not found
- content:
- application/json:
- schema:
- oneOf:
- - $ref: "#/components/schemas/inline_response_404_7"
- - $ref: "#/components/schemas/federation-group-not-found"
- "409":
- description: Conflict (room name already exists)
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/room-already-exists"
- "500":
- description: Room creation failed
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_500"
- security:
- - sfsAuthentication: []
- /api/v1/customer/rooms:
- get:
- deprecated: true
- tags:
- - Room
- summary: List an advisor's rooms (deprecated)
- description: |
- List all rooms where an advisor is either a member or an owner for a given network.
- The search is performed with the advisor's email address.
- This end point returns at most 25 records per page.
- operationId: listRooms
- parameters:
- - name: advisorEmailAddress
- in: query
- description: Advisor's email address
- required: true
- schema:
- type: string
- format: email
- example: william.smith@symphony.com
- - name: externalNetwork
- in: query
- description: "The external network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
- required: true
- schema:
- type: string
- example: WHATSAPP
- - name: owner
- in: query
- description:
- If set to "true", list the rooms where the advisor is an owner.
- If set to "false", list the rooms where the advisor is only a member.
- schema:
- type: boolean
- default: true
- - name: before
- in: query
- description: The before cursor for pagination
- schema:
- type: string
- - name: after
- in: query
- description: The after cursor for pagination
- schema:
- type: string
- responses:
- "200":
- description: List of rooms found
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/rooms-response"
- "400":
- description: Missing or malformed parameter
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/invalid-page-cursor"
- "401":
- description: Unauthorized
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_401"
- "403":
- description: Operation forbidden
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_403_0"
- security:
- - sfsAuthentication: []
- post:
- deprecated: true
- tags:
- - Room
- summary: Create room (deprecated)
- description: |
- Create a room with the advisor whose email address is provided.
- The advisor is set as a member.
- operationId: createRoom
- requestBody:
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/room-request"
- responses:
- "200":
- description: Room created successfully
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/room-creation-response"
- "400":
- description: Bad request
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_400_2"
- "403":
- description: Forbidden
- content:
- application/json:
- schema:
- oneOf:
- - $ref: "#/components/schemas/inline_response_403_2"
- - $ref: "#/components/schemas/inline_response_403_0"
- - $ref: "#/components/schemas/federation-group-emp-forbidden"
- "401":
- description: Unauthorized
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_401"
- "404":
- description: Not found
- content:
- application/json:
- schema:
- oneOf:
- - $ref: "#/components/schemas/inline_response_404_7"
- - $ref: "#/components/schemas/federation-group-not-found"
- "409":
- description: Conflict (room name already exists)
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/room-already-exists"
- "500":
- description: Room creation failed
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_500"
- security:
- - sfsAuthentication: []
-
- /api/v1/customer/rooms/{streamId}/rename:
- post:
- tags:
- - Room
- summary: Rename a room
- operationId: renameRoom
- description: |
- Rename a room with the new room name which is provided.
- security:
- - sfsAuthentication: [ ]
- parameters:
- - in: path
- name: streamId
- schema:
- type: string
- required: true
- description: StreamId of the room to rename.
- requestBody:
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/rename-room-request'
- responses:
- '200':
- description: Room name updated successfully
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/rename-room-response'
- '401':
- description: Unauthorized
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/inline_response_401'
- '403':
- description: Forbidden
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/rename-room-forbidden'
- '404':
- description: Room not found
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/room-not-found'
- '409':
- description: Conflict
- content:
- application/json:
- schema:
- oneOf:
- - $ref: '#/components/schemas/room-already-exists'
- - $ref: '#/components/schemas/different-room-name-required'
- - $ref: '#/components/schemas/cannot-rename-room-duplicate-room-name'
- - $ref: '#/components/schemas/room-is-deactivated'
- '500':
- description: Rename room failed
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/rename-room-failed'
-
- "/api/v1/customer/rooms/{streamId}/ownership":
- post:
- tags:
- - Room
- summary: Transfer room ownership to another advisor
- operationId: transferRoomOwnership
- description: |
- Transfer the room ownership to the advisor matching the provided Symphony user ID.
- This advisor should already be a member of the room.
- security:
- - sfsAuthentication: [ ]
- parameters:
- - in: path
- name: streamId
- schema:
- type: string
- required: true
- description: StreamId of the room to transfer.
- requestBody:
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/transfer-room-ownership-request'
- responses:
- '204':
- description: Room owner updated successfully
- '404':
- description: Not found
- content:
- application/json:
- schema:
- oneOf:
- - $ref: '#/components/schemas/tenant-configuration-not-found'
- - $ref: '#/components/schemas/advisor-not-found'
- - $ref: '#/components/schemas/room-not-found'
- '409':
- description: Conflict
- content:
- application/json:
- schema:
- oneOf:
- - $ref: '#/components/schemas/already-room-owner'
- - $ref: '#/components/schemas/not-a-room-member'
- - $ref: '#/components/schemas/room-is-deactivated'
- - $ref: '#/components/schemas/cannot-transfer-room-ownership-duplicate-room-name'
-
- "/api/v2/customer/rooms/{streamId}/members":
- delete:
- tags:
- - Room
- summary: Remove room member (recommended)
- description:
- Remove any member, advisor or contact from a room.
- The room is identified by its streamID.
- operationId: removeRoomMemberv2
- parameters:
- - name: streamId
- in: path
- description: |
- Room's streamId.
- The streamId needs to be URLsafe Base64.
- To obtain the URLSafe Base64 Conversation ID:
- - replace forward slashes / with underscores
- - replace pluses + with minuses -
- - ignore any trailing equal signs =
- For example, the URLSafe Base64 encoding of: lX1hwfmQ+AK/k/a/BB0y2n///q2+0KfbdA== converts to lX1hwfmQ-AK_k_a_BB0y2n___q2-0KfbdA.
- required: true
- schema:
- type: string
- example: bjHSiY4iz3ar4iIh6-VzCX___peoM7cPdA
- - name: memberSymphonyId
- in: query
- description: The Symphony user ID of the member to remove
- required: true
- schema:
- type: string
- format: number
- example: 1234567890
- - name: advisorSymphonyId
- in: query
- description: The Symphony user ID of the advisor who is removing the member
- required: true
- schema:
- type: number
- example: 1234567890
- responses:
- "200":
- description: Member successfully removed from the room
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/remove-room-members-response"
- "403":
- description: Forbidden
- content:
- application/json:
- schema:
- oneOf:
- - $ref: "#/components/schemas/inline_response_403_3"
- - $ref: "#/components/schemas/inline_response_403_0"
- "401":
- description: Unauthorized
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_401"
- "404":
- description: Not found
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_404_8"
- "409":
- description: Conflict
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_409_1"
- security:
- - sfsAuthentication: []
- post:
- tags:
- - Room
- summary: Add room member (recommended)
- description: |
- Add a member to a room:
-
- - An advisor must be entitled for the relevant external network.
- - A contact must have already been onboarded.
-
- operationId: addRoomMemberMultiRoomv2
- parameters:
- - name: streamId
- in: path
- description: |
- Room's streamId.
- The streamID needs to be URLsafe Base64.
- To obtain the URLSafe Base64 conversation ID:
- - Replace forward slashes / with underscores _
- - Replace pluses + with minuses -
- - Ignore any trailing equal signs =
- For example, the URLSafe Base64 encoding of: lX1hwfmQ+AK/k/a/BB0y2n///q2+0KfbdA== converts to lX1hwfmQ-AK_k_a_BB0y2n___q2-0KfbdA.
- required: true
- schema:
- type: string
- example: bjHSiY4iz3ar4iIh6-VzCX___peoM7cPdA
- requestBody:
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/room-member-requestv2"
- responses:
- "200":
- description: Member successfully added to the room
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/room-member-response"
- "400":
- description: Forbidden
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_400_3"
- "403":
- description: Forbidden
- content:
- application/json:
- schema:
- oneOf:
- - $ref: "#/components/schemas/inline_response_403_2"
- - $ref: "#/components/schemas/inline_response_403_0"
- "401":
- description: Unauthorized
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_401"
- "404":
- description: Not found
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_404_9"
- "409":
- description: Conflict
- content:
- application/json:
- schema:
- oneOf:
- - $ref: "#/components/schemas/room-is-deactivated"
- - $ref: "#/components/schemas/add-room-member-conflicted"
- "500":
- description: Failed to add member to the room
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/add-room-member-failed"
- security:
- - sfsAuthentication: []
- /api/v1/customer/rooms/{streamId}/members:
- get:
- tags:
- - Room
- summary: List room members
- description: |
- List a room’s members. The room is identified by its streamID.
- operationId: listRoomMembers
- parameters:
- - name: streamId
- in: path
- description: |
- Room's streamId.
- The streamId needs to be URL safe Base64.
- To obtain the URLSafe Base64 conversation ID:
- - Replace forward slashes / with underscores _
- - Replace pluses + with minuses -
- - Ignore any trailing equal signs =
- For example, the URLSafe Base64 encoding of: lX1hwfmQ+AK/k/a/BB0y2n///q2+0KfbdA== converts to lX1hwfmQ-AK_k_a_BB0y2n___q2-0KfbdA.
- required: true
- schema:
- type: string
- example: lX1hwfmQ-AK_k_a_BB0y2n___q2-0KfbdA
- - name: before
- in: query
- description: The before cursor for pagination
- schema:
- type: string
- - name: after
- in: query
- description: The after cursor for pagination
- schema:
- type: string
- responses:
- "200":
- description: List of room members
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/room-members-response"
- "400":
- description: Missing or malformed parameter
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/invalid-page-cursor"
- "401":
- description: Unauthorized
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_401"
- "403":
- description: Operation forbidden
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_403_0"
- security:
- - sfsAuthentication: []
- delete:
- deprecated: true
- tags:
- - Room
- summary: Remove room member (deprecated)
- description:
- Remove a member from a room, be it an advisor or a contact.
- The room is identified by its streamId.
- operationId: removeRoomMember
- parameters:
- - name: streamId
- in: path
- description: |
- Room's streamId.
- The streamId needs to be URL safe Base64.
- To obtain the URLSafe Base64 conversation ID:
- - Replace forward slashes / with underscores _
- - Replace pluses + with minuses -
- - Ignore any trailing equal signs =
- For example, the URLSafe Base64 encoding of: lX1hwfmQ+AK/k/a/BB0y2n///q2+0KfbdA== converts to lX1hwfmQ-AK_k_a_BB0y2n___q2-0KfbdA.
-
- required: true
- schema:
- type: string
- example: bjHSiY4iz3ar4iIh6-VzCX___peoM7cPdA
- - name: memberEmailAddress
- in: query
- description: The email address of the member to remove
- required: true
- schema:
- type: string
- format: email
- example: johndoe@symphony.com
- - name: externalNetwork
- in: query
- description: "The external network of the member to remove: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
- required: true
- schema:
- type: string
- example: WHATSAPP
- - name: advisorEmailAddress
- in: query
- description: The email address of the advisor who is removing the member
- required: true
- schema:
- type: string
- example: william.smith@symphony.com
- - name: contact
- in: query
- description: If set to "true", the member to remove is a contact.
- If set to "false", the member to remove is an advisor.
- required: true
- schema:
- type: boolean
- responses:
- "200":
- description: Member successfully removed from the room
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/remove-room-members-response"
- "403":
- description: Forbidden
- content:
- application/json:
- schema:
- oneOf:
- - $ref: "#/components/schemas/inline_response_403_3"
- - $ref: "#/components/schemas/inline_response_403_0"
- "401":
- description: Unauthorized
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_401"
- "404":
- description: Not found
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_404_8"
- security:
- - sfsAuthentication: []
- /api/v1/customer/rooms/{streamId}/features:
- post:
- tags:
- - Room
- summary: Update a room's features
- description: |
- Update a room's features. Only supported for WhatsApp. The room is identified by its streamID.
- operationId: updateRoomFeatures
- requestBody:
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/room-features-request"
- parameters:
- - name: streamId
- in: path
- description: |
- Room's streamId.
- The streamId needs to be URLsafe Base64.
- To obtain the URLSafe Base64 conversation ID:
- - Replace forward slashes / with underscores _
- - Replace pluses + with minuses -
- - Ignore any trailing equal signs =
- For example, the URLSafe Base64 encoding of: lX1hwfmQ+AK/k/a/BB0y2n///q2+0KfbdA== converts to lX1hwfmQ-AK_k_a_BB0y2n___q2-0KfbdA.
- required: true
- schema:
- type: string
- example: lX1hwfmQ-AK_k_a_BB0y2n___q2-0KfbdA
- responses:
- "204":
- description: Features updated successfully
- "400":
- description: Missing or malformed parameter
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/invalid-page-cursor"
- "401":
- description: Unauthorized
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_401"
- "403":
- description: Operation forbidden
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_403_0"
- security:
- - sfsAuthentication: [ ]
- /api/v1/customer/rooms/{streamId}/activity:
- put:
- tags:
- - CustomerRoom
- summary: Update room activity
- operationId: updateRoomActivity
- description: Update room activity room by stream ID
- security:
- - sfsAuthentication: [ ]
- parameters:
- - in: path
- name: streamId
- description: |
- Room's streamId.
- The streamID needs to be URLsafe Base64.
- To obtain the URLSafe Base64 Conversation ID:
-
- - Replace forward slashes / with underscores _
- - Replace pluses + with minuses -
- - Ignore any trailing equal signs =
-
- For example, the URLSafe Base64 encoding of: lX1hwfmQ+AK/k/a/BB0y2n///q2+0KfbdA== converts to lX1hwfmQ-AK_k_a_BB0y2n___q2-0KfbdA.
- schema:
- type: string
- required: true
- requestBody:
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/room-set-activity-request'
- responses:
- '200':
- description: Room Activity successfully updated
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/room-set-activity-response'
- '404':
- description: Room not found
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/room-not-found'
- '500':
- description: Update room Status failed
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/update-room-status-failed'
- '501':
- description: Reactivation Not Implemented
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/reactivate-room-not-implemented'
-
- "/api/v1/customer/rooms/members":
- post:
- deprecated: true
- tags:
- - Room
- summary: Add room member (deprecated)
- description: |
- Add a member to a room:
-
- - An advisor must be entitled for the relevant external network.
- - A contact must have already been onboarded.
-
- operationId: addRoomMemberMultiRoom
- requestBody:
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/room-member-request"
- responses:
- "200":
- description: Member successfully added to the room
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/room-member-response"
- "400":
- description: Forbidden
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_400_3"
- "403":
- description: Forbidden
- content:
- application/json:
- schema:
- oneOf:
- - $ref: "#/components/schemas/inline_response_403_2"
- - $ref: "#/components/schemas/inline_response_403_0"
- "401":
- description: Unauthorized
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_401"
- "404":
- description: Not found
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_404_9"
- "409":
- description: Conflict
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/member-already-in-room"
- "500":
- description: Failed to add member to the room
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/add-room-member-failed"
- security:
- - sfsAuthentication: []
-
- /api/v2/customer/rooms/members:
- post:
- tags:
- - Room
- summary: Add room members in bulk (recommended)
- description: |
- Add multiple advisors and/or contacts to a room.
- An advisor must be entitled for the relevant external network. A contact must have already been onboarded.
- operationId: addRoomMembersMultiRoomv2
- requestBody:
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/bulk-room-member-multi-room-requestv2"
- responses:
- "200":
- description: Operation to add members to the room completed.
- Returns an object with the detail of each member's addition success or failure.
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/bulk-room-member-responsev2"
- "400":
- description: Missing or malformed parameter
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/rfc-error"
- "401":
- description: Unauthorized
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_401"
- "403":
- description: Operation forbidden
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_403_0"
- security:
- - sfsAuthentication: []
- /api/v1/customer/rooms/members/bulk:
- post:
- deprecated: true
- tags:
- - Room
- summary: Add room members in bulk (deprecated)
- description: |
- Add multiple members to a room:
-
- - Advisors must be entitled for the relevant external network.
- - Contacts must have already been onboarded.
-
- Returns a report indicating the success or failure for each element of the array.
- operationId: addRoomMembersMultiRoom
- requestBody:
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/bulk-room-member-multi-room-request"
- responses:
- "200":
- description: Operation to add members to the room completed.
- Returns an object with the detail of each member addition success or failure.
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/bulk-room-member-response"
- "400":
- description: Missing or malformed parameter
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/rfc-error"
- "401":
- description: Unauthorized
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_401"
- "403":
- description: Operation forbidden
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_403_0"
- security:
- - sfsAuthentication: []
-
- /api/v1/customer/companies/search:
- get:
- tags:
- - Companies
- summary: Search for companies
- description: |
- Search for companies by name.
- Note: The WeChat or WhatsApp or SMS or SMS Direct or LINE onboarding applications do not enforce consistency for company names.
- security:
- - sfsAuthentication: []
- operationId: searchCompanies
- parameters:
- - name: query
- in: query
- description: Start of the company's name to match
- required: true
- schema:
- minLength: 3
- type: string
- example: sym
- responses:
- "200":
- description: List of found companies
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/companies-search-response"
- "401":
- description: Unauthorized
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_401"
- "403":
- description: Operation forbidden
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/inline_response_403_0"
-
- /api/v1/customer/federationGroups:
- get:
- tags:
- - Federation Group (**NEW**)
- summary: List all federation groups
- description: |
- List all federation groups
- operationId: listTenantFederationGroups
- parameters:
- - in: query
- name: before
- schema:
- type: string
- description: The before cursor for pagination
- - in: query
- name: after
- schema:
- type: string
- description: The after cursor for pagination
- responses:
- "200":
- description: List of federation groups
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/list-federation-groups-response"
- "401":
- description: Unauthorized
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/Unauthorized"
- "403":
- description: Operation forbidden
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/Forbidden"
- security:
- - sfsAuthentication: []
-
- /api/v1/customer/advisors/{advisorSymphonyId}/externalNetwork/{externalNetwork}/federationGroup:
- put:
- tags:
- - Federation Group (**NEW**)
- summary: Update advisor's federation group for the given external network.
- description: |
- Update advisor's federation group for the given external network.
- operationId: updateAdvisorFederationGroup
- parameters:
- - name: externalNetwork
- in: path
- required: true
- description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
- schema:
- type: string
- example: WHATSAPP
- - name: advisorSymphonyId
- in: path
- required: true
- description: Advisor's Symphony user ID
- schema:
- type: string
- example: 12345678912365
- requestBody:
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/update-federation-group-request"
- responses:
- "204":
- description: The advisor's federation group is updated successfully.
- "400":
- description: Missing or malformed input
- content:
- application/json:
- schema:
- oneOf:
- - $ref: '#/components/schemas/missing-destination-federation-group'
- - $ref: '#/components/schemas/multiple-destination-federation-group'
- - $ref: '#/components/schemas/external-network-not-found'
- "401":
- description: Unauthorized
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/Unauthorized"
- "403":
- description: Operation forbidden
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/federation-group-emp-forbidden"
- "404":
- description: Not found
- content:
- application/json:
- schema:
- oneOf:
- - $ref: "#/components/schemas/federation-group-not-found"
- - $ref: "#/components/schemas/advisor-not-found"
-
- security:
- - sfsAuthentication: []
-
- /api/v1/customer/advisors/federationGroup/bulk:
- post:
- tags:
- - Federation Group (**NEW**)
- summary: Bulk update advisor's federation group
- description: |
- Bulk update advisor's federation group.
- operationId: bulkUpdateAdvisorsFederationGroup
- requestBody:
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/bulk-update-federation-group-request"
- responses:
- "200":
- description: The advisor's federation group is updated successfully.
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/bulk-update-federation-group-response"
- "400":
- description: Missing or malformed input
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/external-network-not-found"
- "401":
- description: Unauthorized
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/Unauthorized"
- "403":
- description: Operation forbidden
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/Forbidden"
- "404":
- description: Not found
- content:
- application/json:
- schema:
- oneOf:
- - $ref: '#/components/schemas/advisor-not-found'
- - $ref: '#/components/schemas/federation-group-not-found'
- security:
- - sfsAuthentication: []
-
- /api/v1/customer/rooms/{streamId}/federationGroup:
- put:
- tags:
- - Federation Group (**NEW**)
- summary: Set federation group of a room
- operationId: updateRoomFederationGroups
- description: Set the federation group of a room.
- parameters:
- - in: path
- name: streamId
- schema:
- type: string
- required: true
- description: StreamId of the room to transfer
- requestBody:
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/room-set-federation-group-request"
- responses:
- "204":
- description: The room's federation group has been updated successfully.
- "400":
- description: Missing or malformed input
- content:
- application/json:
- schema:
- oneOf:
- - $ref: '#/components/schemas/missing-destination-federation-group'
- - $ref: '#/components/schemas/multiple-destination-federation-group'
- "401":
- description: Unauthorized
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/Unauthorized"
- "403":
- description: Operation forbidden
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/federation-group-emp-forbidden"
- "404":
- description: Not found
- content:
- application/json:
- schema:
- oneOf:
- - $ref: "#/components/schemas/room-not-found"
- - $ref: "#/components/schemas/federation-group-not-found"
- "409":
- description: Conflict
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/room-update-federation-group-errors"
- security:
- - sfsAuthentication: []
-
- /api/v1/customer/contacts/{contactSymphonyId}/advisor/{advisorSymphonyId}/resendInvite:
- post:
- tags:
- - Customer invite
- summary: Resend a new onboarding invitation to contact
- operationId: resendInvite
- description: >
- Only applicable for networks requiring onboarding invitations: WeChat, LINE.
- Sends a new onboarding invitation to the contact with the onboarding instructions and a new authentication one-time-password token, if applicable.
- Required to reset the contact's invitation after it expires. The invitation expiry counter (7 days) is reset to zero and the status is changed from "Expired" to "Pending".
- LINE since 23.04: If the user enters an expired one-time-password token within the first 7 days they were onboarded, they automatically receive a new valid token.
- After the 7 days, calling this api is required to reset the user invitation status and to generate a new token.
- security:
- - sfsAuthentication: [ ]
- parameters:
- - in: path
- name: contactSymphonyId
- schema:
- type: string
- format: number
- example: 1234567890
- required: true
- description: Contact's Symphony user ID
- - in: path
- name: advisorSymphonyId
- schema:
- type: string
- format: number
- example: 1234567890
- required: true
- description: Onboarder's Symphony user ID
- responses:
- '200':
- description: The invite has been resent successfully.
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/resend-invite-response"
- '400':
- description: Missing or malformed input
- content:
- application/json:
- schema:
- oneOf:
- - $ref: "#/components/schemas/invite-already-confirmed"
- - $ref: "#/components/schemas/invites-not-configured-on-emp"
- '404':
- description: Not found
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/contact-not-found"
- '500':
- description: Failed
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/resend-invite-failed'
- /api/v1/customer/tenant/empChannelConnector/{externalNetwork}:
- get:
- tags:
- - CustomerContact
- summary: List EMP connectors available for one or multiple contacts
- description: |
- List the EMP connectors available for one or multiple contacts by Symphony IDs \
- EMP connector corresponds to \
- - Official accounts for LINE
- - Business APIs for WhatsApp
- - Phone numbers for SMS
- operationId: listAvailableEmpChannelConnectors
- parameters:
- - name: externalNetwork
- in: path
- description: "The external network: LINE or WHATSAPP or SMS"
- required: true
- schema:
- minLength: 1
- type: string
- example: WHATSAPP
- - name: symphonyId
- in: query
- description: Contacts' Symphony IDs
- required: false
- schema:
- type: array
- items:
- type: string
- pattern: '^\d+$'
- example: 13606456398824
- - name: federationGroupId
- in: query
- description: Federation group ID
- required: false
- schema:
- type: string
- example: 83df14d1-9fdb-4cbb-9a9d-718e5e15266a
- responses:
- '200':
- description: EMP connectors found
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/list-emp-channel-connector-response"
- '404':
- description: Not found
- content:
- application/json:
- schema:
- oneOf:
- - $ref: '#/components/schemas/federation-group-not-found'
- - $ref: '#/components/schemas/tenant-not-found'
- - $ref: '#/components/schemas/contact-not-found'
- '403':
- description: Forbidden
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/federation-group-emp-forbidden'
- '406':
- description: Not acceptable
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/not-applicable-for-external-network'
- security:
- - sfsAuthentication: [ ]
- /api/v1/customer/phone-numbers:
- get:
- tags:
- - CustomerPhoneNumber
- summary: Get phone number details
- operationId: getPhoneNumbers
- description: Get phone numbers.
- security:
- - sfsAuthentication: [ ]
- parameters:
- - in: query
- name: status
- schema:
- type: string
- description: |
- filter on the phone number status either
- - USED
- - FREE
- - RELEASED
- - ON_HOLD
- - in: query
- name: provider
- schema:
- type: string
- description: |
- filter on the provider
- - UMONY
- - CUSTOMER_SUPPLIED
- - in: query
- name: product
- schema:
- type: string
- description: |
- filter on the product
- - VOICE
- - SMS
- - PRE_ALLOCATED_NUMBER
- - PRE_ALLOCATED_FULL
- - SECOND_NUMBER
- - SECOND_NUMBER_FULL
- - in: query
- name: subNetwork
- schema:
- type: string
- description: |
- filter on the subnetwork:
- - SECOND-NUMBER
- - IN-NETWORK
- responses:
- '200':
- description: Request processed
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/phone-numbers-details-response'
- /api/v1/customer/phone-number/{phoneNumber}:
- get:
- tags:
- - CustomerNumber
- summary: Get information on a phone number provided by Symphony
- operationId: getPhoneNumberInfos
- description: >
- Get information on a phone number provided by Symphony
- security:
- - sfsAuthentication: [ ]
- parameters:
- - in: path
- name: phoneNumber
- schema:
- type: string
- format: phone
- required: true
- description: Phone number provided by Symphony
- responses:
- '200':
- description: Found phone number provided by Symphony
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/number-response'
- '404':
- description: Phone number not found
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/number-not-found'
- put:
- tags:
- - CustomerNumber
- summary: Update a phone number
- operationId: updatePhoneNumber
- description: |
- This endpoint allows to update an existing phone number.
-
- Currently, the following operations are supported:
- - Unassign a phone number from an advisor (making it "on hold").
- - Assign a phone number to a new advisor.
- security:
- - sfsAuthentication: [ ]
- parameters:
- - in: path
- name: phoneNumber
- schema:
- type: string
- format: phone
- required: true
- description: The phone number to update.
- requestBody:
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/update-number-request'
- responses:
- '200':
- description: The phone number was successfully updated.
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/number-response'
- '400':
- description: |
- The advisor that the phone number is being associated to does not exist.
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/symphony-user-not-found-problem'
- '403':
- description: |
- It is forbidden to update this phone number. This may happen if:
- - The advisor associated with the phone number is still entitled to a direct EMP,
- - The advisor that the phone number is being associated to is already entitled to a direct EMP with another
- phone number.
- content:
- application/json:
- schema:
- oneOf:
- - $ref: '#/components/schemas/advisor-still-entitled'
- - $ref: '#/components/schemas/advisor-already-entitled-for-direct-emp'
- '404':
- description: |
- May happen if the phone number to update was not found.
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/number-not-found'
-
- /api/v1/customer/phone-number/{phoneNumber}/address:
- get:
- tags:
- - CustomerNumber
- summary: Get phone address
- operationId: getPhoneAddress
- description: >
- Get phone address
- security:
- - sfsAuthentication: [ ]
- parameters:
- - in: path
- name: phoneNumber
- schema:
- type: string
- format: phone
- required: true
- description: Phone number
- responses:
- '200':
- description: Found phone address
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/address-response'
- '404':
- description: Phone number not found
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/number-not-found'
- put:
- tags:
- - CustomerNumber
- summary: Update phone number's address
- operationId: updatePhoneAddress
- description: >
- Update phone number's address
- security:
- - sfsAuthentication: [ ]
- parameters:
- - in: path
- name: phoneNumber
- schema:
- type: string
- format: phone
- required: true
- description: Phone number
- requestBody:
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/address-request'
- responses:
- '204':
- description: The phone number's address has been successfully updated
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/address-response'
- '400':
- description: Nothing to update
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/no-field-updated'
- '404':
- description: Phone number not found
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/number-not-found'
- delete:
- tags:
- - CustomerNumber
- summary: Remove phone number's address
- operationId: removePhoneAddress
- description: >
- Remove phone number's address
- security:
- - sfsAuthentication: [ ]
- parameters:
- - in: path
- name: phoneNumber
- schema:
- type: string
- format: phone
- required: true
- description: Phone number
- responses:
- '204':
- description: The phone number's address has been successfully removed
- '404':
- description: Phone number not found
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/number-not-found'
-
- /api/v1/customer/advisors/{advisorSymphonyId}/phone-number:
- get:
- tags:
- - CustomerNumber
- summary: Get Advisor phone number details
- operationId: getAdvisorPhoneNumbers
- description: Get Advisor phone number details.
- security:
- - sfsAuthentication: [ ]
- parameters:
- - in: path
- name: advisorSymphonyId
- description: Advisor's symphony ID
- required: true
- schema:
- type: string
- pattern: '^\d+$'
- responses:
- '200':
- description: Request processed
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/phone-number-info'
- '404':
- description: |
- This may happen if:
- - The advisor does not have any phone number associated.
- - The requested advisor is not found.
- content:
- application/json:
- schema:
- oneOf:
- - $ref: '#/components/schemas/phone-number-not-assigned'
- - $ref: '#/components/schemas/advisor-not-found'
-
-components:
- schemas:
- phone-number-info:
- type: object
- properties:
- phoneNumber:
- type: string
- example: 911234567890
- subNetwork:
- type: string
- description: |
- sub network of the phone, either:
- - SECOND-NUMBER
- - IN-NETWORK
- country:
- type: string
- carrier:
- type: string
- status:
- type: string
- description: |
- Phone number status
- - USED
- - FREE
- - RELEASED
- - ON_HOLD
- productCode:
- type: integer
- product:
- type: string
- description: |
- For fully ported or partially ported numbers
- - PRE_ALLOCATED_NUMBER
- - PRE_ALLOCATED_FULL
- - SECOND_NUMBER
- - SECOND_NUMBER_FULL
- - VOICE (For In-Network numbers only)
- - SMS (For In-Network numbers only)
- provider:
- type: string
- enum:
- - UMONY
- - CUSTOMER_SUPPLIED
- assignedTo:
- $ref: '#/components/schemas/assigned-to'
- externalNetworks:
- type: array
- items:
- $ref: '#/components/schemas/external-network'
- assigned-to:
- type: object
- properties:
- advisorSymphonyId:
- type: string
- example: 911234567890
- advisorFirstName:
- type: string
- advisorLastName:
- type: string
- external-network:
- type: object
- properties:
- externalNetwork:
- type: string
- example: WHATSAPP-DIRECT
- availability:
- type: string
- empStatus:
- type: string
- enum:
- - CONNECTED
- - DISCONNECTED
- - PENDING
- - UNKNOWN
- phone-number-not-assigned:
- type: object
- description: 'The specified advisor does not have a phone number assigned'
- properties:
- type:
- type: string
- format: 'phone.number.not.assigned'
- title:
- type: string
- format: 'The specified advisor does not have a phone number assigned'
- status:
- type: integer
- format: "404"
- entitlements-response:
- type: object
- properties:
- entitlements:
- example:
- - WECHAT
- - WHATSAPP
- - SMS
- - SMS-DIRECT
- - LINE
- entitled-response:
- type: object
- properties:
- entitlements:
- type: array
- items:
- $ref: "#/components/schemas/entitlement-response"
- pagination:
- $ref: "#/components/schemas/pagination"
- search-contact-response:
- type: object
- properties:
- firstName:
- type: string
- example: John
- lastName:
- type: string
- example: Doe
- companyName:
- type: string
- example: Company
- emailAddress:
- type: string
- example: johndoe@symphony.com
- phoneNumber:
- type: string
- example: 911234567890
- externalNetwork:
- type: string
- description: "External network : WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
- example: WHATSAPP
- symphonyId:
- type: string
- example: 12345678912365
- status:
- $ref: '#/components/schemas/contact-status'
- statusUpdateDate:
- type: string
- format: date-time
- example: 1547661232368
- ownAdvisorId:
- type: string
- example: 12345678912300
- preferredLanguage:
- type: string
- example: English
- invitationCode:
- type: string
- example: AB12DE43
- room: # Room is null if the emp is not 1:1 only
- $ref: '#/components/schemas/room-creation-response'
- isColleague:
- type: boolean
- default: false
- example: false
- consent:
- type: string
- enum:
- - OPTED_IN
- - OPTED_OUT
- - PENDING
- example: PENDING
- phoneNumberBlockedBy:
- type: array
- items:
- $ref: '#/components/schemas/blocked-by-item'
-
- entitlement-response:
- type: object
- properties:
- symphonyId:
- type: string
- example: "14362370637825"
- firstName:
- type: string
- example: William
- lastName:
- type: string
- example: Smith
- companyName:
- type: string
- example: Company
- displayName:
- type: string
- example: William Smith
- emailAddress:
- type: string
- example: william.smith@symphony.com
- avatar:
- type: string
- example: "https://YOURDOMAIN.symphony.com/avatars/3gXMhglCCTwLPL9JAprnyHzYn5-PR49-wYDG814n1g8.png"
- externalNetwork:
- type: string
- example: WHATSAPP_DIRECT
- federationGroupId:
- type: string
- example: federationGroupId
- status:
- type: string
- example: PRE_ENTITLED
- phone:
- $ref: "#/components/schemas/phone"
- permissions:
- type: array
- items:
- $ref: '#/components/schemas/permission-response'
- phone:
- type: object
- description: "Phone number (direct EMP case)"
- properties:
- number:
- type: string
- example: "+1 234-567-8912"
- product:
- type: string
- example: "PRE_ALLOCATED_HOSTED"
- subNetwork:
- type: string
- description: "Sub-network: IN-NETWORK or SECOND-NUMBER"
- example: "SECOND-NUMBER"
- provider:
- type: string
- enum:
- - UMONY
- - CUSTOMER_SUPPLIED
- list-emp-channel-connector-response:
- type: object
- properties:
- empChannelConnectors:
- type: array
- items:
- $ref: '#/components/schemas/emp-channel-connector-response'
- emp-channel-connector-response:
- allOf:
- - $ref: "#/components/schemas/emp-channel-connector"
- - type: object
- properties:
- available:
- type: boolean
- emp-channel-connector:
- type: object
- properties:
- displayName:
- type: string
- example: Official Account Name
- id:
- type: string
- example: 123456
- add-entitlementv2-response:
- type: object
- properties:
- symphonyId:
- type: string
- example: 14362370637825
- firstName:
- type: string
- example: William
- lastName:
- type: string
- example: Smith
- companyName:
- type: string
- example: Company
- displayName:
- type: string
- example: William Smith
- emailAddress:
- type: string
- example: william.smith@symphony.com
- avatar:
- type: string
- example: "https://YOURDOMAIN.symphony.com/avatars/3gXMhglCCTwLPL9JAprnyHzYn5-PR49-wYDG814n1g8.png"
- externalNetwork:
- type: string
- example: WHATSAPP
- permissions:
- type: array
- items:
- $ref: "#/components/schemas/bulk-permission-item"
- federationGroupId:
- type: string
- example: federationGroupId
- ownContactId:
- type: string
- example: 14362370637825
- status:
- type: string
- enum:
- - PRE_ENTITLED
- - ENTITLED
- phone:
- $ref: "#/components/schemas/phone"
- invalid-page-cursor:
- type: object
- properties:
- type:
- type: string
- format: invalid.page.cursor
- title:
- type: string
- format: The provided cursor key is invalid or expired.
- status:
- type: integer
- format: "400"
- description: The provided cursor key is invalid or expired
- entitlement-request:
- required:
- - externalNetwork
- type: object
- properties:
- advisorEmailAddress:
- type: string
- example: william.smith@symphony.com
- externalNetwork:
- description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
- type: string
- example: WHATSAPP
- symphonyId:
- type: string
- example: 12345678912365
- advisorPhoneNumber:
- description: "Required for the advisor to access SMS Direct In-Network and supported for SMS Direct Second-Number. Supported for the advisor to access WhatsApp Direct. However, note that the advisor’s phone number is not applicable for onboarding the advisor to other external networks (WeChat, WhatsApp, SMS or LINE)."
- type: string
- format: phone
- permissions:
- type: array
- items:
- type: string
- federationGroupId:
- type: string
- example: federationGroupId
- pre-entitlement-request:
- type: object
- required:
- - advisorPhoneNumber
- properties:
- advisorPhoneNumber:
- type: string
- format: phone
- federationGroupId:
- type: string
- entitlement-user-already-exists-problem:
- type: object
- properties:
- type:
- type: string
- format: entitlement.already.exists
- title:
- type: string
- format: Entitlement already exists.
- status:
- type: integer
- format: "400"
- description: Entitlement already exists.
- advisor-phone-number-not-supported-problem:
- type: object
- properties:
- type:
- type: string
- format: advisor.phone.number.not.supported
- title:
- type: string
- format: Advisor's phone number not supported.
- status:
- type: integer
- format: "400"
- description: Advisor's phone number is not supported for this external network.
- advisor-phone-number-is-required-problem:
- type: object
- properties:
- type:
- type: string
- format: advisor.phone.number.is.required
- title:
- type: string
- format: Advisor's phone number is required.
- status:
- type: integer
- format: "400"
- description: Advisor's phone number is required for this external network.
- advisor-phone-number-already-used-problem:
- type: object
- properties:
- type:
- type: string
- format: advisor.phone.number.already.used
- title:
- type: string
- format: Advisor's phone number already used.
- status:
- type: integer
- format: "409"
- description: Advisor's phone number is already used.
- pre-entitlement-permissions-not-supported-problem:
- type: object
- properties:
- type:
- type: string
- format: 'pre.entitlement.permissions.not.supported'
- title:
- type: string
- format: 'Permissions are not supported for pre-entitlements.'
- status:
- type: integer
- format: "400"
- contact-status:
- type: string
- enum:
- - PENDING_CONFIRMATION
- - CONFIRMED
- - INVITE_EXPIRED
- - UNAVAILABLE
- - INCOMPLETE
- - OPTED_IN
- - OPTED_OUT
- symphony-user-not-found-problem:
- type: object
- properties:
- type:
- type: string
- format: symphony.user.not.found
- title:
- type: string
- format: Symphony user not found.
- status:
- type: integer
- format: "400"
- description: Symphony user not found.
- entitlement-type-not-found-problem:
- type: object
- properties:
- type:
- type: string
- format: entitlement.type.not.found
- title:
- type: string
- format: Entitlement type not found.
- status:
- type: integer
- format: "400"
- description: Entitlement type not found
- forbidden-entitlement-type:
- type: object
- properties:
- type:
- type: string
- format: forbidden.entitlement.type
- title:
- type: string
- format: Forbidden entitlement.type.
- status:
- type: integer
- format: "403"
- description: Forbidden entitlement type.
- pre-entitlement-phone-number-mismatch:
- description: The phone number of the pre-entitlement does not match.
- properties:
- type:
- type: string
- format: pre.entitlement.phone.number.mismatch
- title:
- type: string
- format: The phone number of the pre-entitlement does not match.
- status:
- type: integer
- format: "409"
- number-not-available:
- type: object
- description: Number not available
- properties:
- type:
- type: string
- format: number.not.available
- title:
- type: string
- format: Number not available
- status:
- type: integer
- format: "409"
- number-registration-not-possible:
- type: object
- description: Number registration is not possible
- properties:
- type:
- type: string
- format: number.registration.not.possible
- title:
- type: string
- format: Number registration not possible
- detailMessage:
- type: string
- format: Detail message
- status:
- type: integer
- format: "409"
- tenant-configuration-not-found:
- type: object
- properties:
- type:
- type: string
- format: tenant.configuration.not.found
- title:
- type: string
- format: Tenant configuration not found.
- status:
- type: integer
- format: "404"
- description: Tenant configuration not found.
- entitlement-not-found-problem:
- type: object
- properties:
- type:
- type: string
- format: entitlement.not.found
- title:
- type: string
- format: Entitlement not found.
- status:
- type: integer
- format: "404"
- description: Entitlement not found.
- contact-not-found:
- type: object
- properties:
- type:
- type: string
- format: contact.not.found
- title:
- type: string
- format: Contact not found
- status:
- type: integer
- format: "404"
- description: Contact not found
- company-not-found:
- type: object
- properties:
- type:
- type: string
- format: company.not.found
- title:
- type: string
- format: Company not found
- status:
- type: integer
- format: "404"
- description: Company not found
- no-available-number:
- type: object
- properties:
- type:
- type: string
- format: no.available.number
- title:
- type: string
- format: No available number.
- status:
- type: integer
- format: "500"
- description: No available number.
- incompatible-external-network-and-request-body:
- type: object
- description: 'Incompatible external network and request body.'
- properties:
- type:
- type: string
- format: 'incompatible.external.network.request.body'
- title:
- type: string
- format: 'Incompatible external network and request body.'
- status:
- type: integer
- format: "400"
- user-id-mismatch:
- type: object
- description: 'The token userId does not match the request.'
- properties:
- type:
- type: string
- format: 'user.id.mismatch'
- title:
- type: string
- format: 'The token userId does not match the request.'
- status:
- type: integer
- format: "403"
- phone-international-onboarding-forbidden:
- type: object
- description: 'Forbidden international onboarding.'
- properties:
- type:
- type: string
- format: 'phone.international.onboarding.forbidden'
- title:
- type: string
- format: 'Forbidden international onboarding.'
- status:
- type: integer
- format: "403"
- deleteContacts-response:
- type: object
- properties:
- report:
- type: array
- items:
- $ref: "#/components/schemas/deleteContact-response"
- deleteContact-response:
- type: object
- properties:
- contact:
- $ref: "#/components/schemas/deleteContact-request"
- status:
- $ref: "#/components/schemas/bulk-removal-status"
- deleteContact-request:
- required:
- - advisorEmailAddress
- - externalNetwork
- - contactEmailAddress
- type: object
- properties:
- advisorEmailAddress:
- type: string
- example: william.smith@symphony.com
- contactEmailAddress:
- type: string
- format: email
- example: johndoe@symphony.com
- externalNetwork:
- description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
- type: string
- example: WHATSAPP
- customer-deleteAdvisorContacts-responsev2:
- type: object
- properties:
- report:
- type: array
- items:
- $ref: '#/components/schemas/customer-deleteAdvisorContact-responsev2'
- customer-deleteAdvisorContact-responsev2:
- type: object
- properties:
- contact:
- $ref: '#/components/schemas/customer-deleteAdvisorContact-contact'
- status:
- $ref: '#/components/schemas/bulk-removal-status'
- customer-deleteAdvisorContact-contact:
- required:
- - advisorSymphonyId
- - phoneNumber
- - externalNetwork
- type: object
- properties:
- advisorSymphonyId:
- type: string
- example: 1234567890
- phoneNumber:
- type: string
- example: +1 234567890
- externalNetwork:
- type: string
- example: WHATSAPP
- deleteContacts-request:
- type: object
- properties:
- contacts:
- type: array
- items:
- $ref: "#/components/schemas/deleteContact-request"
- customer-contactWithId-response:
- type: object
- properties:
- contact:
- $ref: "#/components/schemas/customer-contactWithId"
- status:
- $ref: "#/components/schemas/bulk-removal-status"
- customer-contactsWithId-response:
- type: object
- properties:
- report:
- type: array
- items:
- $ref: "#/components/schemas/customer-contactWithId-response"
- customer-contactWithId:
- type: object
- properties:
- advisorSymphonyId:
- type: string
- advisorEmailAddress:
- type: string
- contactEmailAddress:
- type: string
- externalNetwork:
- type: string
- deleteContacts-responsev2:
- type: object
- properties:
- report:
- type: array
- items:
- $ref: "#/components/schemas/deleteContact-responsev2"
- deleteContact-responsev2:
- type: object
- properties:
- contact:
- $ref: "#/components/schemas/deleteContact-requestv2"
- status:
- $ref: "#/components/schemas/bulk-removal-statusv2"
- deleteContact-requestv2:
- required:
- - advisorSymphonyId
- - contactSymphonyId
- type: object
- properties:
- advisorSymphonyId:
- type: string
- example: 1234567890
- contactSymphonyId:
- type: string
- format: number
- example: 1234567890
- deleteContacts-requestv2:
- type: object
- properties:
- contacts:
- type: array
- items:
- $ref: "#/components/schemas/deleteContact-requestv2"
- customer-contactWithId-responsev2:
- type: object
- properties:
- contact:
- $ref: "#/components/schemas/customer-contactWithIdv2"
- status:
- $ref: "#/components/schemas/bulk-removal-status"
- customer-contactsWithId-responsev2:
- type: object
- properties:
- report:
- type: array
- items:
- $ref: "#/components/schemas/customer-contactWithId-responsev2"
- customer-contactWithIdv2:
- type: object
- properties:
- advisorSymphonyId:
- type: string
-
- advisor-not-found:
- type: object
- properties:
- type:
- type: string
- example: advisor.not.found
- title:
- type: string
- example: advisor not found
- status:
- type: integer
- example: 404
- description: Advisor not found
- advisor-id-not-provided:
- description: 'Advisor ID or email not provided'
- properties:
- type:
- type: string
- format: 'advisor.identifier.not.provided'
- title:
- type: string
- format: 'Advisor ID or email not provided.'
- status:
- type: integer
- example: 400
- not-a-room-member:
- type: object
- description: 'Not a room member.'
- properties:
- type:
- type: string
- format: 'not.a.room.member'
- title:
- type: string
- format: 'Not a room member.'
- status:
- type: integer
- example: 409
-
- already-room-owner:
- type: object
- description: 'Advisor already room owner.'
- properties:
- type:
- type: string
- format: 'advisor.already.room.owner'
- title:
- type: string
- format: 'Advisor already room owner.'
- status:
- type: integer
- example: 409
-
- cannot-transfer-room-ownership-duplicate-room-name:
- type: object
- description: 'Cannot transfer room ownership because the advisor is already owner of a room with the same name'
- properties:
- type:
- type: string
- format: 'cannot.transfer.room.ownership.duplicate.room.name'
- title:
- type: string
- format: 'Cannot transfer room ownership because the advisor is already owner of a room with the same name'
- status:
- type: integer
- example: 409
-
- room-is-deactivated:
- type: object
- description: The Room is Deactivated.
- properties:
- type:
- type: string
- format: room.is.deactivated
- title:
- type: string
- format: The Room is Deactivated.
- status:
- type: integer
- example: 409
- roomName:
- type: string
- nullable: true
- format: name of the deactivated room
- Unauthorized:
- type: object
- properties:
- type:
- type: string
- example: unauthorized
- title:
- type: string
- example: Unauthorized
- status:
- type: integer
- example: 401
- description: Full authentication is required to access this resource
- Forbidden:
- type: object
- properties:
- type:
- type: string
- example: Forbidden
- title:
- type: string
- example: Forbidden
- status:
- type: integer
- example: 403
- description: Access is denied, you don't have the permission to perform this operation
- permissions-response:
- type: object
- properties:
- permissions:
- type: array
- items:
- $ref: "#/components/schemas/list-permission-response"
- enhanced-permissions-response:
- type: object
- properties:
- permissions:
- type: array
- items:
- $ref: "#/components/schemas/enhanced-permission-response"
- enhanced-permission-response:
- type: object
- properties:
- isDefault:
- type: boolean
- permissionId:
- type: string
- permissionName:
- type: string
- bulk-permission-item:
- type: object
- properties:
- status:
- type: integer
- example: 200
- response:
- $ref: "#/components/schemas/permission-response"
- error:
- $ref: "#/components/schemas/bulk-item-error"
- list-permission-response:
- type: string
- example: "create:room"
- permission-response:
- type: object
- properties:
- permissionName:
- type: string
- example: "create:room"
- permissionId:
- type: string
- example: "aef488fa-636e-483e-b366-278e07354e57"
- advisor-permissions-response:
- type: object
- properties:
- advisorSymphonyId:
- type: string
- example: 14362370637825
- externalNetwork:
- description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
- type: string
- example: WHATSAPP
- permissions:
- type: array
- items:
- $ref: "#/components/schemas/permission-response"
- advisors-permission-requestv2:
- required:
- - advisorSymphonyIds
- - externalNetwork
- - permissionName
- type: object
- properties:
- advisorSymphonyIds:
- type: array
- items:
- type: string
- example: 1234567890
- externalNetwork:
- description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
- type: string
- example: WHATSAPP
- permissionName:
- type: string
- example: "create:room"
- advisors-permission-request:
- required:
- - advisorEmailAddress
- - externalNetwork
- - permissionName
- type: object
- properties:
- advisorEmailAddress:
- type: array
- items:
- type: string
- example: william.smith@symphony.com
- externalNetwork:
- description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
- type: string
- example: WHATSAPP
- permissionName:
- type: string
- example: "create:room"
- advisor-permission-request:
- required:
- - permissionName
- type: object
- properties:
- permissionName:
- type: string
- example: "create:room"
- advisor-permission-response:
- type: object
- properties:
- advisorSymphonyId:
- type: string
- example: 14362370637825
- externalNetwork:
- description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
- type: string
- example: WHATSAPP
- permission:
- $ref: "#/components/schemas/permission-response"
- permission-not-found:
- type: object
- properties:
- type:
- type: string
- format: permission.not.found
- title:
- type: string
- format: Permission not found.
- status:
- type: integer
- format: "404"
- description: Permission not found.
- permission-already-assigned:
- type: object
- properties:
- type:
- type: string
- format: permission.already.assigned
- example: permission.already.assigned
- title:
- type: string
- format: Permission already assigned.
- example: Permission already assigned.
- status:
- type: integer
- format: "409"
- example: 409
- description: Permission already assigned.
- missing-destination-federation-group:
- type: object
- properties:
- type:
- type: string
- format: missing.destination.federation.group
- title:
- type: string
- format: Missing destination federation group
- status:
- type: integer
- format: "400"
- multiple-destination-federation-group:
- type: object
- properties:
- type:
- type: string
- format: multiple.destination.federation.group
- title:
- type: string
- format: Multiple destination federation group
- status:
- type: integer
- format: "400"
- bulk-advisor-permission-response:
- type: object
- properties:
- advisorsPermissions:
- type: array
- items:
- $ref: "#/components/schemas/bulk-advisor-permission-item-response"
- bulk-advisor-permission-item-response:
- type: object
- properties:
- status:
- type: integer
- response:
- $ref: "#/components/schemas/advisor-permission-response"
- error:
- $ref: "#/components/schemas/bulk-item-error"
- multiple-advisor-permission-response:
- type: object
- properties:
- advisorsPermissions:
- type: array
- items:
- type: object
- properties:
- status:
- type: integer
- example: 200
- response:
- type: object
- properties:
- advisorSymphonyId:
- type: string
- description: Symphony user ID of the advisor
- example: "12345678912365"
- email:
- type: string
- description: email adress of the advisor
- example: "william.smith@symphony.com"
- externalNetwork:
- description: WHATSAPP
- type: string
- example: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
- permission:
- type: object
- properties:
- permissionName:
- type: string
- example: "create:room"
- error:
- type: object
- description: Should an error occur while adding or removing the permission, this returned object will provide details about the error(s)
- properties:
- title:
- type: string
- example: advisor.not.found
- detail:
- type: string
- example: "Advisor 68719476737 does not exist"
- customer-contact-request:
- allOf:
- - $ref: "#/components/schemas/contact-request"
- - required:
- - onboarderEmailAddress
- type: object
- properties:
- advisorEmailAddresses:
- type: array
- description: A list of email addresses of the advisor to whom the contact is to be added. For WeChat, an "onboarder" is an advisor with the permission "create:contact". For WhatsApp, SMS, SMS Direct and LINE, the permission is set by default.
- items:
- type: string
- format: email
- example: william.smith@symphony.com
- onboarderEmailAddress:
- type: string
- example: william.smith@symphony.com
- description: If both advisorSymphonyIds and advisorEmailAddresses are empty, the contact will be added to the onboarder with this email address.
- createRoom:
- type: boolean
- description: Can be set to false in order to prevent the room creation when onboarding a contact on SMS Direct or WhatsApp Direct. This parameter can't be set to true for WhatsApp, SMS, Wechat and LINE for now.
- add-contact-response:
- type: object
- properties:
- firstName:
- type: string
- example: John
- lastName:
- type: string
- example: Doe
- companyName:
- type: string
- example: Company
- emailAddress:
- type: string
- example: johndoe@symphony.com
- phoneNumber:
- type: string
- example: 911234567890
- externalNetwork:
- description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
- type: string
- example: WHATSAPP
- symphonyId:
- type: string
- example: 12345678912365
- status:
- type: string
- enum:
- - PENDING_CONFIRMATION
- - CONFIRMED
- - INVITE_EXPIRED
- - CANCELED
- - UNAVAILABLE
- - INCOMPLETE
- statusUpdateDate:
- type: string
- format: date-time
- example: 1547661232368
- preferredLanguage:
- type: string
- example: CHINESE_CHN, CHINESE_HKG, CHINESE_TAI, JAPANESE (among others, see release note for more)
- invitationCode:
- type: string
- example: "AB12DE43"
- phoneNumberBlockedBy:
- type: array
- items:
- $ref: '#/components/schemas/blocked-by-item'
- list-contact-response:
- type: object
- properties:
- contacts:
- type: array
- items:
- $ref: "#/components/schemas/find-contact-response-v2-with-block-status"
- pagination:
- $ref: "#/components/schemas/pagination"
- find-contact-response:
- type: object
- properties:
- firstName:
- type: string
- example: John
- lastName:
- type: string
- example: Doe
- companyName:
- type: string
- example: Company
- emailAddress:
- type: string
- example: johndoe@symphony.com
- phoneNumber:
- type: string
- example: 911234567890
- externalNetwork:
- description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
- type: string
- example: WHATSAPP
- symphonyId:
- type: string
- example: 12345678912365
- advisors:
- type: array
- description: Advisors Symphony IDs
- items:
- type: string
- example: [123456789, 369258147, 7896564123]
- status:
- type: string
- enum: [PENDING_CONFIRMATION, CONFIRMED, INVITE_EXPIRED, CANCELED, UNAVAILABLE, INCOMPLETE]
- isColleague:
- type: boolean
- default: false
- find-contact-response-v2-with-block-status: #Not added yet in "Get contact by phone number"
- allOf:
- - $ref: "#/components/schemas/find-contact-response-v2"
- - $ref: '#/components/schemas/blocked-by-item'
- find-contact-response-v2:
- allOf:
- - $ref: "#/components/schemas/find-contact-response"
- - type: object
- properties:
- preferredLanguage:
- type: string
- example: CHINESE_CHN, CHINESE_HKG, CHINESE_TAI, JAPANESE (among others, see release note for more)
- blocked-by-item:
- type: object
- properties:
- advisorSymphonyId:
- type: string
- format: phone
- reason:
- $ref: '#/components/schemas/blocking-reason-enum'
- comment:
- type: string
- requestDate:
- type: string
- format: date-time
-
- external-network-not-found:
- type: object
- properties:
- type:
- type: string
- format: external.network.not.found
- example: Bad request
- title:
- type: string
- format: External network not found.
- example: Bad request
- status:
- type: integer
- format: "400"
- example: 400
- description: External network not found.
- invalid-user-info:
- type: object
- properties:
- type:
- type: string
- format: invalid.user.information
- title:
- type: string
- format: Invalid user information
- status:
- type: integer
- format: "400"
- example: 400
- description: Invalid user information
- rename-room-forbidden:
- type: object
- description: 'Rename room forbidden'
- properties:
- type:
- type: string
- format: 'rename.room.forbidden'
- title:
- type: string
- format: 'Not allowed to rename the room.'
- status:
- type: integer
- format: "403"
- different-room-name-required:
- type: object
- description: 'Different room name is required.'
- properties:
- type:
- type: string
- format: 'different.room.name.required'
- title:
- type: string
- format: 'Different room name is required.'
- status:
- type: integer
- format: "409"
- cannot-rename-room-duplicate-room-name:
- type: object
- description: 'Cannot rename room because the owner already has a room with the same name.'
- properties:
- type:
- type: string
- format: 'cannot.rename.room.duplicate.room.name'
- title:
- type: string
- format: 'Cannot rename room because the owner already has a room with the same name.'
- status:
- type: integer
- format: "409"
- rename-room-failed:
- type: object
- description: 'Failed to rename the room.'
- properties:
- type:
- type: string
- format: 'rename.room.failed'
- title:
- type: string
- format: 'Unable to rename the room.'
- status:
- type: integer
- format: "500"
- forbidden-advisor:
- type: object
- properties:
- type:
- type: string
- format: onboarding.forbidden.advisor
- title:
- type: string
- format: This Advisor is not permissioned for Onboarding.
- status:
- type: integer
- format: "403"
- description: This Advisor is not permissioned for Onboarding.
- forbidden-onboarder:
- type: object
- properties:
- type:
- type: string
- format: onboarding.forbidden.onboarder
- title:
- type: string
- format: This Onboarder is not entitled for this external network.
- #find where to define "onboarder" = Advisor with onboarding permission. Need to modify API code to change this message
- status:
- type: integer
- format: "403"
- description: This Onboarder is not entitled for this external network.
- #find where to define "onboarder" = Advisor with onboarding permission. Need to modify API code to change this message
- user-already-onboarded:
- type: object
- properties:
- type:
- type: string
- format: user.already.onboarded
- title:
- type: string
- format: Contact already onboarded.
- status:
- type: integer
- format: "409"
- description: Contact already onboarded.
- user-already-exists:
- type: object
- properties:
- type:
- type: string
- format: user.already.exists
- title:
- type: string
- format: Contact already exists.
- status:
- type: integer
- format: "409"
- description: Contact already exists.
- create-account-failed:
- type: object
- properties:
- type:
- type: string
- format: account.creation.failed
- title:
- type: string
- format: Unable to create the account.
- status:
- type: integer
- format: "500"
- description: Gateway microservice cannot create the Symphony account.
- customer-update-contacts-requestv2:
- required:
- - firstName
- - lastName
- - companyName
- - phoneNumber
- - advisorSymphonyId
- type: object
- properties:
- firstName:
- type: string
- example: John
- lastName:
- type: string
- example: DoeABC
- companyName:
- type: string
- example: Company
- maxLength: 100
- phoneNumber:
- type: string
- format: phone
- example: 911234567890
- emailAddress:
- type: string
- example: johndoe@symphony.com
- advisorSymphonyId:
- type: string
- pattern: '^\d+$'
- example: 1234567890
- preferredLanguage:
- type: string
- description: Contact preferred language. Refer to contact preferred language section at the beginning of this documentation for valid language name.
- example: CHINESE_CHN, CHINESE_HKG, CHINESE_TAI, JAPANESE, etc.
- customer-update-contacts-request:
- allOf:
- - $ref: "#/components/schemas/update-contacts-request"
- - required:
- - advisorEmailAddress
- type: object
- properties:
- advisorEmailAddress:
- type: string
- format: email
- example: william.smith@symphony.com
- update-contacts-response:
- type: object
- properties:
- firstName:
- type: string
- example: John
- lastName:
- type: string
- example: DoeABC
- companyName:
- type: string
- example: Company
- emailAddress:
- type: string
- example: johndoe@symphony.com
- phoneNumber:
- type: string
- example: 911234567890
- externalNetwork:
- description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
- type: string
- example: WHATSAPP
- symphonyId:
- type: string
- description: Federated user Symphony ID
- example: 12345678912365
- advisors:
- type: array
- description: Advisors Symphony IDs
- items:
- type: string
- example: 14362370637825
- update-contacts-response-v2:
- type: object
- properties:
- firstName:
- type: string
- example: John
- lastName:
- type: string
- example: DoeABC
- companyName:
- type: string
- example: Company
- emailAddress:
- type: string
- example: johndoe@symphony.com
- phoneNumber:
- type: string
- example: 911234567890
- symphonyId:
- type: string
- description: Federated user Symphony id
- example: 12345678912365
- advisors:
- type: array
- description: Advisors Symphony IDs
- items:
- type: string
- example: 14362370637825
- preferredLanguage:
- type: string
- description: Contact preferred language
- example: CHINESE_CHN, CHINESE_HKG, CHINESE_TAI, JAPANESE, etc.
- update-forbidden-for-advisor:
- type: object
- properties:
- type:
- type: string
- format: update.forbidden.advisor
- title:
- type: string
- format: Contacts update is forbidden for this Advisor.
- status:
- type: integer
- format: "403"
- description: Contacts update is forbidden for this Advisor.
- update-forbidden-for-contact:
- type: object
- properties:
- type:
- type: string
- format: update.forbidden.contact
- title:
- type: string
- format: Update forbidden for this contact.
- status:
- type: integer
- format: "403"
- description: Update forbidden for this contact.
- multi-tenant-federated-user-update-attempt:
- type: object
- properties:
- type:
- type: string
- format: multi.tenant.federated.user.update.attempt
- title:
- type: string
- format: Found Contact records spanning across more than one tenant.
- status:
- type: integer
- format: "403"
- description: Found Contact records spanning across more than one tenant.
- cannot-edit-advisor-own-contact-email:
- type: object
- properties:
- type:
- type: string
- format: cannot.edit.advisor.own.contact.email
- title:
- type: string
- format: Cannot edit advisor own contact email.
- status:
- type: integer
- format: "403"
- description: Cannot edit advisor own contact email
- update-account-failed:
- type: object
- properties:
- type:
- type: string
- format: account.update.failed
- title:
- type: string
- format: Unable to update the Contact.
- status:
- type: integer
- format: "500"
- description: Gateway microservice cannot update the Symphony account.
- advisors-search-response:
- type: object
- properties:
- advisors:
- type: array
- items:
- $ref: "#/components/schemas/entitlement-response"
- pagination:
- $ref: "#/components/schemas/pagination"
- search-contacts-response:
- type: object
- properties:
- contacts:
- type: array
- items:
- $ref: '#/components/schemas/search-contact-response'
- pagination:
- $ref: '#/components/schemas/pagination'
-
- contacts-response:
- type: object
- properties:
- contacts:
- type: array
- items:
- $ref: "#/components/schemas/add-contact-response"
- pagination:
- $ref: "#/components/schemas/pagination"
- rooms-response:
- type: object
- properties:
- rooms:
- type: array
- items:
- $ref: "#/components/schemas/room-response"
- pagination:
- $ref: "#/components/schemas/pagination"
- room-response:
- type: object
- properties:
- streamId:
- type: string
- example: bjHSiY4iz3ar4iIh6-VzCX___peoM7cPdA
- roomName:
- type: string
- example: API room
- advisorSymphonyId:
- type: string
- example: 12345678912365
- federationGroupId:
- type: string
- example: federationGroupId
- created:
- type: string
- format: date-time
- example: 1547661232368
- updated:
- type: string
- format: date-time
- example: 1547661232370
- roomType:
- type: string
- enum:
- - ROOM
- - IM
- membersCount:
- type: integer
- example: 1
- company:
- type: string
- example: Company
- roomStatus:
- type: string
- enum:
- - ACTIVE
- - LIMITED
- - DEACTIVATED
- - UNKNOWN
- limitedMembersCount:
- type: integer
- example: 1
- pendingMembersCount:
- type: integer
- example: 2
- unknownStatusMembersCount:
- type: integer
- example: 0
- room-creation-response:
- type: object
- properties:
- streamId:
- type: string
- example: bjHSiY4iz3ar4iIh6-VzCX___peoM7cPdA
- roomName:
- type: string
- example: API room
- advisorSymphonyId:
- type: string
- example: 12345678912365
- federationGroupId:
- type: string
- example: federationGroupId
- created:
- type: string
- format: date-time
- example: 1547661232368
- updated:
- type: string
- format: date-time
- example: 1547661232370
- roomType:
- type: string
- enum:
- - ROOM
- - IM
- membersCount:
- type: integer
- example: 1
- room-creation-response-v2:
- allOf:
- - $ref: "#/components/schemas/room-creation-response"
- - type: object
- properties:
- externalNetworkRoomDisplayName:
- type: string
- room-request:
- required:
- - advisorEmailAddress
- - externalNetwork
- - roomName
- type: object
- properties:
- roomName:
- maxLength: 50
- type: string
- example: API room
- advisorEmailAddress:
- type: string
- format: email
- example: william.smith@symphony.com
- externalNetwork:
- description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
- maxLength: 50
- type: string
- example: WHATSAPP
- room-requestv2:
- required:
- - ownerSymphonyId
- - externalNetwork
- - roomName
- type: object
- properties:
- roomName:
- maxLength: 50
- type: string
- example: API room
- federationGroupId:
- type: string
- example: federationGroupId
- externalNetworkRoomDisplayName:
- maxLength: 50
- type: string
- example: API room
- ownerSymphonyId:
- type: string
- format: number
- example: 1234567890
- externalNetwork:
- description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
- maxLength: 50
- type: string
- example: WHATSAPP
- rename-room-request:
- type: object
- required:
- - newRoomName
- properties:
- newRoomName:
- type: string
- minLength: 1
- maxLength: 50
- transfer-room-ownership-request:
- type: object
- required:
- - newRoomOwnerSymphonyId
- properties:
- newRoomOwnerSymphonyId:
- type: string
- format: number
- example: 1234567890
- rename-room-response:
- type: object
- properties:
- streamId:
- type: string
- oldRoomName:
- type: string
- newRoomName:
- type: string
- connection-not-accepted:
- type: object
- properties:
- type:
- type: string
- format: connection.not.accepted
- title:
- type: string
- format: connection with Symphony Connect Assistant is not accepted
- status:
- type: integer
- format: "400"
- description: Connection with Symphony Connect Assistant is not accepted
- federated-account-not-found:
- type: object
- properties:
- type:
- type: string
- format: federated.account.not.found
- title:
- type: string
- format: federated account not found
- status:
- type: integer
- format: "404"
- description: FederatedAccount not found.
- room-already-exists:
- type: object
- properties:
- type:
- type: string
- format: room.already.exists
- title:
- type: string
- format: Room already exists.
- status:
- type: integer
- format: "409"
- description: Room already exists.
- create-room-failed:
- type: object
- properties:
- type:
- type: string
- format: room.creation.failed
- title:
- type: string
- format: Unable to create the room.
- status:
- type: integer
- format: "500"
- description: Gateway microservice cannot create the room.
- missing-connection-with-connect-bot:
- type: object
- properties:
- type:
- type: string
- format: missing.connection.with.connect.bot
- title:
- type: string
- format: connection with Symphony Connect Assistant does not exist
- status:
- type: integer
- format: "500"
- description: Connection with Symphony Connect Assistant does not exist
- room-members-response:
- type: object
- properties:
- members:
- type: array
- items:
- $ref: "#/components/schemas/room-member-response"
- pagination:
- $ref: "#/components/schemas/pagination"
- room-member-response:
- type: object
- properties:
- streamId:
- type: string
- example: bjHSiY4iz3ar4iIh6-VzCX___peoM7cPdA
- symphonyId:
- type: string
- example: 12345678912365
- federatedUserId:
- type: string
- example: 14362370637825
- externalNetwork:
- description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
- type: string
- example: WHATSAPP
- firstName:
- type: string
- example: John
- lastName:
- type: string
- example: Doe
- companyName:
- type: string
- example: Company
- avatar:
- type: string
- example: "https://YOURDOMAIN.symphony.com/avatars/3gXMhglCCTwLPL9JAprnyHzYn5-PR49-wYDG814n1g8.png"
- displayName:
- type: string
- example: John Doe
- emailAddress:
- type: string
- example: johndoe@symphony.com
- isOwner:
- type: boolean
- example: false
- empChannelConnector:
- allOf:
- - $ref: "#/components/schemas/emp-channel-connector"
- description: "Network channel connector used for room member. Only for LINE"
- room-set-activity-response:
- type: object
- properties:
- isRoomActivityUpdated:
- type: boolean
- newRoomStatus:
- type: string
- enum:
- - ACTIVE
- - DEACTIVATED
- remove-room-members-response:
- type: object
- properties:
- isRoomDeleted:
- type: boolean
- advisor-contact-rooms-response:
- type: object
- description: Rooms for an advisor and contact
- properties:
- advisorSymphonyId:
- type: string
- format: string
- pattern: '^\d+$'
- example: 1234567890
- contactSymphonyId:
- type: string
- format: string
- pattern: '^\d+$'
- example: 1234567890
- sortedBy:
- type: string
- enum:
- - createdDate_DESC
- rooms:
- type: array
- description: Room basic information
- items:
- $ref: '#/components/schemas/room-basic-information'
- room-basic-information:
- type: object
- properties:
- stream-id:
- type: string
- room-name:
- type: string
- emp:
- type: string
- created-date:
- type: integer
- format: int64
- remove-room-member-forbidden:
- type: object
- properties:
- type:
- type: string
- format: remove.room.member.forbidden
- title:
- type: string
- format: Remove room member forbidden
- status:
- type: integer
- format: "403"
- description: Remove room member forbidden
- room-not-found:
- type: object
- properties:
- type:
- type: string
- format: room.not.found
- title:
- type: string
- format: Room not found
- status:
- type: integer
- format: "404"
- description: Room not found
- room-member-not-found:
- type: object
- properties:
- type:
- type: string
- format: room.member.not.found
- title:
- type: string
- format: Room member not found
- status:
- type: integer
- format: "404"
- description: Room member not found
- update-room-status-failed:
- type: object
- description: 'Gateway microservice cannot update the status of the room.'
- properties:
- type:
- type: string
- format: 'update.room.status.failed'
- title:
- type: string
- format: 'Unable to update the status of the room.'
- status:
- type: integer
- format: "500"
- reactivate-room-not-implemented:
- type: object
- description: 'Reactivate Room Not Implemented'
- properties:
- type:
- type: string
- format: 'reactivate.room.not.implemented'
- title:
- type: string
- format: 'Reactivate Room Not Implemented'
- status:
- type: integer
- format: "501"
- room-features-request:
- type: object
- properties:
- attachmentsDisabled:
- description: Allows to enable or disable attachments in a room. Only supported for WhatsApp.
- type: boolean
- room-set-activity-request:
- type: object
- required:
- - setActive
- properties:
- setActive:
- type: boolean
- room-member-request:
- required:
- - advisorEmailAddress
- - externalNetwork
- - contact
- - memberEmailAddress
- - streamId
- type: object
- properties:
- streamId:
- type: string
- example: bjHSiY4iz3ar4iIh6-VzCX___peoM7cPdA
- memberEmailAddress:
- type: string
- format: email
- example: johndoe@symphony.com
- advisorEmailAddress:
- type: string
- format: email
- example: william.smith@symphony.com
- externalNetwork:
- description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
- type: string
- example: WHATSAPP
- contact:
- type: boolean
- example: true
- room-member-requestv2:
- required:
- - advisorSymphonyId
- - memberSymphonyId
- - externalNetwork
- - contact
- type: object
- properties:
- memberSymphonyId:
- type: string
- format: number
- example: 1234567890
- advisorSymphonyId:
- type: string
- format: number
- example: 1234567890
- externalNetwork:
- description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
- type: string
- example: WHATSAPP
- contact:
- description: "Boolean indicating whether added member is an advisor (false) or a federated user (true)"
- type: boolean
- default: false
- empChannelConnector:
- description: "ID of the Emp channel Connector to use to reach the federated user. Required for LINE in case automatic LINE channel selection feature is not enabled for your tenant, not applicable for the other external networks."
- type: string
- multi-external-network-room-not-supported:
- type: object
- properties:
- type:
- type: string
- format: multi.external.network.room.not.supported
- title:
- type: string
- format: multi external network rooms not supported
- status:
- type: integer
- format: "400"
- description: Multi-External network rooms are not supported.
- multi-company-room-not-supported:
- type: object
- properties:
- type:
- type: string
- format: multi.company.room.not.supported
- title:
- type: string
- format: multi company rooms not supported
- status:
- type: integer
- format: "400"
- description: Multi-Company rooms are not supported.
- member-already-in-room:
- type: object
- properties:
- type:
- type: string
- format: member.already.in.room
- title:
- type: string
- format: Member already in room.
- status:
- type: integer
- format: "409"
- description: Member already in room.
- add-room-member-failed:
- type: object
- properties:
- type:
- type: string
- format: add.room.member.failed
- title:
- type: string
- format: Unable to add the member to room.
- status:
- type: integer
- format: "500"
- description: Gateway microservice cannot create/add the member to room.
- add-room-member-conflicted:
- type: object
- description: Gateway microservice cannot create/add the member in the room.
- properties:
- type:
- type: string
- format: add.room.member.conflicted
- title:
- type: string
- format: Unable to add the member in the room.
- status:
- type: integer
- format: "409"
- bulk-room-member-multi-room-requestv2:
- type: object
- properties:
- requests:
- maxItems: 20
- minItems: 1
- type: array
- items:
- $ref: "#/components/schemas/room-member-multi-room-requestv2"
- advisorSymphonyId:
- type: string
- format: number
- example: 1234567890
- externalNetwork:
- description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
- type: string
- example: WHATSAPP
- room-member-multi-room-requestv2:
- required:
- - memberSymphonyId
- - streamId
- type: object
- properties:
- streamId:
- type: string
- example: bjHSiY4iz3ar4iIh6-VzCX___peoM7cPdA
- memberSymphonyId:
- type: string
- format: number
- example: 1234567890
- empChannelConnector:
- type: string
- format: string
- example: SYM0001
- bulk-room-member-responsev2:
- type: object
- properties:
- members:
- type: array
- items:
- $ref: "#/components/schemas/bulk-room-member-item-responsev2"
- bulk-room-member-item-responsev2:
- type: object
- properties:
- status:
- type: integer
- response:
- $ref: "#/components/schemas/room-member-response"
- error:
- $ref: "#/components/schemas/bulk-item-error"
- bulk-room-member-multi-room-request:
- type: object
- properties:
- requests:
- maxItems: 100
- minItems: 1
- type: array
- items:
- $ref: "#/components/schemas/room-member-multi-room-request"
- advisorEmailAddress:
- type: string
- format: email
- example: william.smith@symphony.com
- externalNetwork:
- description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
- type: string
- example: WHATSAPP
- room-member-multi-room-request:
- required:
- - contact
- - memberEmailAddress
- - streamId
- type: object
- properties:
- streamId:
- type: string
- example: bjHSiY4iz3ar4iIh6-VzCX___peoM7cPdA
- memberEmailAddress:
- type: string
- format: email
- example: johndoe@symphony.com
- contact:
- type: boolean
- example: true
- bulk-room-member-response:
- type: object
- properties:
- members:
- type: array
- items:
- $ref: "#/components/schemas/bulk-room-member-item-response"
- bulk-room-member-item-response:
- type: object
- properties:
- status:
- type: integer
- response:
- $ref: "#/components/schemas/room-member-response"
- error:
- $ref: "#/components/schemas/bulk-item-error"
- list-federation-groups-item-response:
- type: object
- properties:
- federationGroupId:
- type: string
- description: Internal system federation group identifier
- example: company-federation-group1
- federationGroupName:
- type: string
- description: Out facing customer display name
- example: federationGroup
- activeExternalNetworks:
- type: array
- description: List of activated external network for the federation group
- items:
- type: string
- description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
- example: WHATSAPP
- list-federation-groups-response:
- type: object
- properties:
- federationGroups:
- type: array
- items:
- $ref: '#/components/schemas/list-federation-groups-item-response'
- pagination:
- $ref: '#/components/schemas/pagination'
- bulk-update-federation-group-item-request:
- type: object
- required:
- - externalNetwork
- - symphonyId
- properties:
- symphonyId:
- type: string
- example: 123456789
- externalNetwork:
- type: string
- description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
- example: WHATSAPP
- federationGroupId:
- type: string
- example: company-federation-group1
- bulk-update-federation-group-request:
- type: object
- properties:
- request:
- type: array
- items:
- $ref: '#/components/schemas/bulk-update-federation-group-item-request'
- minItems: 1
- maxItems: 100
- example:
- request:
- - symphonyId: 1234512345
- externalNetwork: WHATSAPP
- federationGroupId: company-federation-group1
- - symphonyId: 1357913579
- externalNetwork: WHATSAPP
- federationGroupId: company-federation-group2
- update-federation-group-request:
- type: object
- required:
- - federationGroupId
- properties:
- federationGroupId:
- type: string
- example: company-federation-group1
- moveToDefault:
- type: boolean
- update-federation-group-response:
- type: object
- properties:
- symphonyId:
- type: string
- example: 123456789
- federationGroupId:
- type: string
- example: company-federation-group1
- externalNetwork:
- type: string
- example: WHATSAPP
- bulk-update-federation-group-item-response:
- type: object
- properties:
- status:
- type: integer
- response:
- type: object
- $ref: '#/components/schemas/update-federation-group-response'
- error:
- type: object
- $ref: '#/components/schemas/bulk-item-error'
-
- update-contact-response:
- type: object
- properties:
- blocked:
- type: object
- $ref: '#/components/schemas/block-contact-information'
- update-contact-request:
- type: object
- properties:
- blocked:
- type: object
- $ref: '#/components/schemas/block-contact-information'
- block-contact-information:
- type: object
- properties:
- reason:
- type: string
- comment:
- type: string
- updateDate:
- type: string
- format: date-time
-
- bulk-update-federation-group-response:
- type: object
- properties:
- responses:
- type: array
- items:
- $ref: '#/components/schemas/bulk-update-federation-group-item-response'
- room-set-federation-group-request:
- type: object
- properties:
- federationGroupId:
- type: string
- example: 123456789
- moveToDefault:
- type: boolean
- example: true
- rfc-error:
- type: object
- properties:
- type:
- type: string
- description: |
- An absolute URI that identifies the problem type. When dereferenced,
- it SHOULD provide human-readable documentation for the problem type
- (e.g., using HTML).
- format: uri
- example: "https://zalando.github.io/problem/constraint-violation"
- default: "about:blank"
- title:
- type: string
- description: |
- A short, summary of the problem type. Written in English and readable
- for engineers (usually not suited for non technical stakeholders and
- not localized); example: Service Unavailable
- status:
- maximum: 600
- exclusiveMaximum: true
- minimum: 100
- type: integer
- description: |
- The HTTP status code generated by the origin server for this occurrence
- of the problem.
- format: int32
- example: 503
- detail:
- type: string
- description: |
- A human readable explanation specific to this occurrence of the
- problem.
- example: Connection to database timed out
- instance:
- type: string
- description: |
- An absolute URI that identifies the specific occurrence of the problem.
- It may or may not yield further information if dereferenced.
- format: uri
- companies-search-response:
- type: object
- properties:
- companies:
- type: array
- items:
- $ref: "#/components/schemas/company-response"
- company-response:
- type: object
- properties:
- companyName:
- type: string
- example: symphony
- pagination:
- title: Pagination
- type: object
- properties:
- previous:
- type: string
- format: uri
- example: "?before=ewogICJlbWFpbEFkZHJlc3MiOiB7CiAgICAicyI6ICJtb2NrLnVzZXJAbW9jay5jb20iCiAgfQp9"
- next:
- type: string
- format: uri
- example: "?after=ewogICJlbWFpbEFkZHJlc3MiOiB7CiAgICAicyI6ICJtb2NrLnVzZXJAbW9jay5jb20iCiAgfQp9"
- cursors:
- $ref: "#/components/schemas/cursors"
- cursors:
- title: Cursors
- type: object
- properties:
- before:
- type: string
- example: ewogICJlbWFpbEFkZHJlc3MiOiB7CiAgICAicyI6ICJtb2NrLnVzZXJAbW9jay5jb20iCiAgfQp9
- after:
- type: string
- example: ewogICJlbWFpbEFkZHJlc3MiOiB7CiAgICAicyI6ICJtb2NrLnVzZXJAbW9jay5jb20iCiAgfQp9
- bulk-removal-status:
- type: string
- enum:
- - FAILURE
- - SUCCESS
- bulk-removal-statusv2:
- type: string
- enum:
- - FAILURE
- - SUCCESS
- - NOT_FOUND
- bulk-item-error:
- type: object
- properties:
- itemId:
- type: string
- description: Context dependent identifier of the item
- type:
- type: string
- description: |
- An absolute URI that identifies the problem type. When dereferenced,
- it SHOULD provide human-readable documentation for the problem type
- (e.g., using HTML).
- format: uri
- example: "https://zalando.github.io/problem/constraint-violation"
- default: "about:blank"
- title:
- type: string
- description: |
- A short, summary of the problem type. Written in English and readable
- for engineers (usually not suited for non technical stakeholders and
- not localized); example: Service Unavailable
- statusCode:
- maximum: 600
- exclusiveMaximum: true
- minimum: 100
- type: integer
- description: |
- The HTTP status code generated by the origin server for this occurrence
- of the problem.
- format: int32
- example: 503
- detail:
- type: string
- description: |
- A human readable explanation specific to this occurrence of the
- problem.
- example: Connection to database timed out
- instance:
- type: string
- description: |
- An absolute URI that identifies the specific occurrence of the problem.
- It may or may not yield further information if dereferenced.
- format: uri
- # TODO
- # use map instead of object
- # but readme.io does not support maps
- parameters:
- type: object
- properties:
- additionalProp1:
- type: "string"
- additionalProp2:
- type: "string"
- additionalProp3:
- type: "string"
- contact-request:
- required:
- - externalNetwork
- - firstName
- - lastName
- - phoneNumber
- type: object
- properties:
- firstName:
- type: string
- example: John
- lastName:
- type: string
- example: Doe
- companyName:
- type: string
- example: Company
- description: For SMS, LINE, WHATSAPP and WECHAT, the companyName is mandatory
- maxLength: 100
- emailAddress:
- type: string
- format: email
- example: johndoe@symphony.com
- description: For SMS, LINE, WHATSAPP and WECHAT, the emailAddress is mandatory
- phoneNumber:
- type: string
- format: phone
- example: 911234567890
- externalNetwork:
- description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
- type: string
- example: WHATSAPP
- advisorSymphonyIds:
- type: array
- description: A list of Symphony user IDs of the advisors to add the contact to.
- items:
- pattern: ^\d+$
- type: number
- example: 14362370637825
- preferredLanguage:
- type: string
- description: Contact preferred language code
- example: CHINESE_CHN, CHINESE_HKG, CHINESE_TAI, JAPANESE (among others, see release note for more)
- update-contacts-request:
- required:
- - companyName
- - phoneNumber
- - externalNetwork
- - firstName
- - lastName
- type: object
- properties:
- firstName:
- type: string
- example: John
- lastName:
- type: string
- example: DoeABC
- companyName:
- type: string
- example: Company
- maxLength: 100
- phoneNumber:
- type: string
- format: phone
- example: 911234567890
- externalNetwork:
- type: string
- example: WHATSAPP
- description: WHATSAPP
- number-response:
- type: object
- required:
- - phoneNumber
- properties:
- phoneNumber:
- type: string
- example: 911234567890
- subNetwork:
- type: string
- country:
- type: string
- carrier:
- type: string
- provider:
- type: string
- status:
- type: string
- address:
- $ref: '#/components/schemas/address-response'
- assignedTo:
- $ref: '#/components/schemas/assigned-to'
- phone-numbers-details-response:
- type: object
- properties:
- numbers:
- type: array
- items:
- $ref: '#/components/schemas/phone-number-info'
- update-number-request:
- type: object
- properties:
- assignedTo:
- $ref: '#/components/schemas/assigned-to-request'
- assigned-to-request:
- type: object
- properties:
- advisorSymphonyId:
- type: string
- example: 911234567890
- description: |
- The Symphony identifier of the advisor to assign this resource to, or empty string to unassign.
- address-response:
- type: object
- properties:
- property:
- type: string
- example: Symphony
- line1:
- type: string
- example: 980 Avenue de Roumanille
- line2:
- type: string
- example: Le Fairway, Bâtiment A
- city:
- type: string
- example: Biot
- state:
- type: string
- example: France
- zip:
- type: string
- example: 06410
- zipPlusFour:
- type: string
- example: 06410
- address-request:
- type: object
- properties:
- property:
- type: string
- example: Symphony
- line1:
- type: string
- example: 980 Avenue de Roumanille
- line2:
- type: string
- example: Le Fairway, Bâtiment A
- city:
- type: string
- example: Biot
- state:
- type: string
- example: France
- zip:
- type: string
- example: 06410
- zipPlusFour:
- type: string
- example: 06410
- federation-group-emp-forbidden:
- type: object
- description: Access is denied, you don't have the permission to perform this operation
- properties:
- type:
- type: string
- format: federation.group.external.network.forbidden
- title:
- type: string
- example: The external network is not activated for federation group federation-group-id
- status:
- type: integer
- format: "403"
- not-applicable-for-external-network:
- type: object
- description: 'Not Applicable for the given external network.'
- properties:
- type:
- type: string
- format: 'not.applicable.for.external.network'
- title:
- type: string
- format: 'Not Applicable for the given external network.'
- status:
- type: integer
- format: "406"
- federation-group-not-found:
- type: object
- properties:
- type:
- type: string
- format: federation.group.not.found
- title:
- type: string
- format: Federation group not found.
- status:
- type: integer
- format: "404"
- description: Federation group not found
-
- tenant-not-found:
- type: object
- description: 'Tenant not found'
- properties:
- type:
- type: string
- format: 'tenant.not.found'
- title:
- type: string
- format: 'Tenant not found'
- status:
- type: integer
- format: "404"
- room-update-federation-group-errors:
- type: object
- properties:
- type:
- type: string
- example: room.update.failed
- title:
- type: string
- example: room update failed
- status:
- type: integer
- example: 409
- errors:
- type: array
- items:
- type: object
- properties:
- symphonyId:
- type: string
- example: 123456789
- reason:
- type: string
- description: External network specific error related to each room channel
- example: Could not allocate new phone number for the customer.
- errorCode:
- type: string
- description: External network specific error code
- example: no.business.api.available
- preferred-language-not-supported:
- type: object
- description: Preferred language not supported.
- properties:
- type:
- type: string
- format: preferred.language.not.supported
- title:
- type: string
- format: Preferred language not supported.
- status:
- type: integer
- format: "400"
- resend-invite-response:
- type: object
- properties:
- invitationCode:
- type: string
- example: "AB12DE43"
- invite-already-confirmed:
- type: object
- description: 'Invite is already confirmed.'
- properties:
- type:
- type: string
- format: 'invite.already.confirmed'
- title:
- type: string
- format: 'Invite is already confirmed.'
- status:
- type: integer
- format: "400"
- invites-not-configured-on-emp:
- type: object
- description: 'Invites not configured on EMP'
- properties:
- type:
- type: string
- format: 'invites.not.configured.on.emp'
- title:
- type: string
- format: 'Invites not configured on Emp.'
- status:
- type: integer
- format: "400"
- resend-invite-failed:
- type: object
- description: 'Invite resend failed.'
- properties:
- type:
- type: string
- format: 'resend.invite.failed'
- title:
- type: string
- format: 'Resend invite failed.'
- status:
- type: integer
- format: "500"
- copy-contact-response:
- type: object
- properties:
- newSymphonyId:
- type: string
- description: Symphony user ID of the account copy
- example: 12345678912365
- migratedStreamIds:
- type: array
- description: StreamIds of the rooms in which the user's account has been replaced with the account copy.
- items:
- type: string
- user-copy-not-supported-for-network:
- type: object
- properties:
- type:
- type: string
- format: user.copy.not.supported.for.network
- title:
- type: string
- format: user copy not supported for the external network
- status:
- type: integer
- format: "400"
- description: |
- Contact copy is not supported for the external network of the contact. Contact copy is supported only for WHATSAPP and SMS.
- current-tenant-has-own-user-copy:
- type: object
- properties:
- type:
- type: string
- format: current.tenant.has.own.user.copy
- title:
- type: string
- format: Current tenant has already its own copy for user.
- status:
- type: integer
- format: "409"
- description: Tenant requesting the contact copy already has its own copy of the contact. The copy contact action is not required.
- user-copy-not-supported-for-ims:
- type: object
- properties:
- type:
- type: string
- format: user.copy.not.own.supported.for.ims
- title:
- type: string
- format: User copy is not supported for user having IMs
- status:
- type: integer
- format: "403"
- description: Contact copy is not supported for users who are part of IMs. These IMs need to be removed first.
- copy-contact-failed:
- type: object
- description: 'Unable to copy the contact.'
- properties:
- type:
- type: string
- format: 'account.copy.failed'
- title:
- type: string
- format: 'Unable to copy the account.'
- status:
- type: integer
- format: "500"
- number-not-found:
- type: object
- description: 'Number not found'
- properties:
- type:
- type: string
- format: 'number.not.found'
- title:
- type: string
- format: 'Number not found'
- status:
- type: integer
- format: "404"
- no-numbers-found:
- type: object
- description: 'No numbers found'
- properties:
- type:
- type: string
- format: 'no.numbers.found'
- title:
- type: string
- format: 'No numbers found'
- status:
- type: integer
- format: "404"
- address-already-empty:
- type: object
- description: 'Address already empty'
- properties:
- type:
- type: string
- format: 'address.already.empty'
- title:
- type: string
- format: 'Address already empty'
- status:
- type: integer
- format: "400"
- no-field-updated:
- type: object
- description: 'No field updated'
- properties:
- type:
- type: string
- format: 'no.field.updated'
- title:
- type: string
- format: 'No field updated'
- status:
- type: integer
- format: "400"
-
- advisor-already-has-phone-allocated-problem:
- type: object
- description: 'The advisor already has an allocated phone number.'
- properties:
- type:
- type: string
- format: 'advisor.already.has.phone.allocated'
- title:
- type: string
- format: 'The advisor already has an allocated phone number.'
- status:
- type: integer
- format: "409"
- phone-number-already-allocated-problem:
- type: object
- description: 'The phone number is already allocated.'
- properties:
- type:
- type: string
- format: 'phone.already.allocated'
- title:
- type: string
- format: 'The phone number is already allocated.'
- status:
- type: integer
- format: "409"
- phone-number-pre-allocation-not-supported-problem:
- description: 'Phone number pre-allocation is not supported for this external network.'
- properties:
- type:
- type: string
- format: 'phone.number.pre.allocation.not.supported'
- title:
- type: string
- format: 'Phone number pre-allocation is not supported.'
- status:
- type: integer
- format: "400"
- pre-entitlement-failed:
- type: object
- description: 'Pre-entitlement failed.'
- properties:
- type:
- type: string
- format: 'pre.entitlement.failed'
- title:
- type: string
- format: 'Pre-entitlement failed.'
- status:
- type: integer
- format: "500"
- pre-entitlement-not-found:
- type: object
- description: 'Pre-entitlement not found'
- properties:
- type:
- type: string
- format: 'pre.entitlement.not.found'
- title:
- type: string
- format: 'Pre-entitlement not found'
- status:
- type: integer
- format: "404"
-
- advisor-already-entitled:
- type: object
- description: 'Advisor already entitled'
- properties:
- type:
- type: string
- format: 'advisor.already.entitled'
- title:
- type: string
- format: 'Advisor already entitled'
- status:
- type: integer
- format: "403"
-
- advisor-already-entitled-for-direct-emp:
- type: object
- description: Advisor is already entitled to another direct EMP
- properties:
- type:
- type: string
- format: advisor.already.entitled.for.direct.emp
- title:
- type: string
- format: The advisor for which the number is reassigned must not be entitled on a direct EMP
- status:
- type: integer
- format: "403"
-
- advisor-still-entitled:
- type: object
- description: |
- Returned when the advisor associated with the phone number is still entitled to a direct EMP.
- properties:
- type:
- type: string
- format: 'advisor.still.entitled'
- title:
- type: string
- format: An advisor is still entitled to a Direct EMP with this phone number
- status:
- type: integer
- format: "403"
-
- customer-block-phone-numbers-request:
- type: object
- required:
- - phoneNumbers
- properties:
- phoneNumbers:
- type: array
- items:
- $ref: '#/components/schemas/customer-block-phone-numbers-item-request'
- minItems: 1
- maxItems: 100
-
- customer-unblock-phone-numbers-request:
- type: object
- required:
- - phoneNumbers
- properties:
- phoneNumbers:
- type: string
- format: phone
-
- customer-block-phone-numbers-item-request:
- type: object
- required:
- - phoneNumber
- - reason
- properties:
- phoneNumber:
- type: string
- format: phone
- reason:
- $ref: '#/components/schemas/blocking-reason-enum'
- comment:
- type: string
-
-
- get-blocked-phone-numbers-response:
- type: object
- properties:
- phoneNumbers:
- type: array
- items:
- $ref: '#/components/schemas/get-blocked-phone-numbers-item'
-
- get-blocked-phone-numbers-item:
- type: object
- properties:
- phoneNumber:
- type: string
- format: phone
- reason:
- $ref: '#/components/schemas/blocking-reason-enum'
- comment:
- type: string
-
- blocking-reason-enum:
- type: string
- enum:
- - SPAM
- - ABUSE
- - COMPLIANCE
- - OTHER
-
- # Responses
- customer-block-phone-numbers-response:
- type: object
- properties:
- phoneNumbers:
- type: array
- items:
- $ref: '#/components/schemas/customer-block-phone-numbers-item-response'
-
- customer-block-phone-numbers-item-response:
- type: object
- properties:
- phoneNumber:
- type: string
- status:
- type: integer
- error:
- type: object
- $ref: '#/components/schemas/bulk-item-error'
-
- not-entitled-on-direct-emp:
- type: object
- description: 'Not Entitled on direct emp.'
- properties:
- type:
- type: string
- format: 'not.entitled.on.direct.emp'
- title:
- type: string
- format: 'Not Entitled on direct emp.'
- status:
- type: integer
- format: "403"
-
- phone-number-not-found:
- type: object
- description: 'Phone number not found'
- properties:
- type:
- type: string
- format: 'phone.number.not.found'
- title:
- type: string
- format: 'Phone number not found'
- status:
- type: integer
- format: "404"
-
- subnetwork-not-implemented:
- type: object
- description: 'Subnetwork not implemented.'
- properties:
- type:
- type: string
- format: 'subnetwork.not.implemented'
- title:
- type: string
- format: 'subnetwork not implemented.'
- status:
- type: integer
- format: "501"
-
- inline_response_400:
- oneOf:
- - $ref: "#/components/schemas/entitlement-user-already-exists-problem"
- - $ref: "#/components/schemas/symphony-user-not-found-problem"
- - $ref: "#/components/schemas/entitlement-type-not-found-problem"
- - $ref: "#/components/schemas/advisor-id-not-provided"
- inline_response_404_1:
- oneOf:
- - $ref: "#/components/schemas/advisor-not-found"
- - $ref: "#/components/schemas/contact-not-found"
- inline_response_404_2:
- oneOf:
- - $ref: "#/components/schemas/tenant-configuration-not-found"
- - $ref: "#/components/schemas/advisor-not-found"
- - $ref: "#/components/schemas/permission-not-found"
- inline_response_404_3:
- oneOf:
- - $ref: "#/components/schemas/advisor-not-found"
- - $ref: "#/components/schemas/permission-not-found"
- inline_response_400_1:
- oneOf:
- - $ref: "#/components/schemas/external-network-not-found"
- - $ref: "#/components/schemas/invalid-user-info"
- inline_response_403:
- oneOf:
- - $ref: "#/components/schemas/forbidden-advisor"
- - $ref: "#/components/schemas/forbidden-onboarder"
- - $ref: "#/components/schemas/forbidden-entitlement-type"
- inline_response_409:
- oneOf:
- - $ref: "#/components/schemas/user-already-onboarded"
- - $ref: "#/components/schemas/user-already-exists"
- inline_response_409_1:
- oneOf:
- - $ref: "#/components/schemas/user-already-onboarded"
- inline_response_403_1:
- oneOf:
- - $ref: "#/components/schemas/forbidden-entitlement-type"
- - $ref: "#/components/schemas/update-forbidden-for-advisor"
- - $ref: "#/components/schemas/update-forbidden-for-contact"
- - $ref: "#/components/schemas/multi-tenant-federated-user-update-attempt"
- inline_response_404_4:
- oneOf:
- - $ref: "#/components/schemas/tenant-configuration-not-found"
- - $ref: "#/components/schemas/contact-not-found"
- - $ref: "#/components/schemas/advisor-not-found"
- inline_response_404_5:
- oneOf:
- - $ref: "#/components/schemas/advisor-not-found"
- inline_response_401:
- oneOf:
- - $ref: "#/components/schemas/Unauthorized"
- inline_response_403_0:
- oneOf:
- - $ref: "#/components/schemas/Forbidden"
- inline_response_404_6:
- oneOf:
- - $ref: "#/components/schemas/contact-not-found"
- inline_response_400_2:
- oneOf:
- - $ref: "#/components/schemas/connection-not-accepted"
- inline_response_403_2:
- oneOf:
- - $ref: "#/components/schemas/forbidden-advisor"
- - $ref: "#/components/schemas/forbidden-entitlement-type"
- inline_response_404_7:
- oneOf:
- - $ref: "#/components/schemas/tenant-configuration-not-found"
- - $ref: "#/components/schemas/advisor-not-found"
- - $ref: "#/components/schemas/federated-account-not-found"
- - $ref: "#/components/schemas/contact-not-found"
- inline_response_500:
- oneOf:
- - $ref: "#/components/schemas/create-room-failed"
- - $ref: "#/components/schemas/missing-connection-with-connect-bot"
- inline_response_403_3:
- oneOf:
- - $ref: "#/components/schemas/forbidden-advisor"
- - $ref: "#/components/schemas/remove-room-member-forbidden"
- - $ref: "#/components/schemas/forbidden-entitlement-type"
- inline_response_404_8:
- oneOf:
- - $ref: "#/components/schemas/room-not-found"
- - $ref: "#/components/schemas/room-member-not-found"
- - $ref: "#/components/schemas/advisor-not-found"
- - $ref: "#/components/schemas/tenant-configuration-not-found"
- inline_response_400_3:
- oneOf:
- - $ref: "#/components/schemas/multi-external-network-room-not-supported"
- - $ref: "#/components/schemas/multi-company-room-not-supported"
- inline_response_404_9:
- oneOf:
- - $ref: "#/components/schemas/tenant-configuration-not-found"
- - $ref: "#/components/schemas/advisor-not-found"
- - $ref: "#/components/schemas/room-not-found"
-
- securitySchemes:
- sfsAuthentication:
- type: http
- scheme: bearer
- bearerFormat: JWT
- description: HTTP header
-security:
- - sfsAuthentication: []
From 2d6d3d7449028ba59f84cc85a1285aff7ba749d3 Mon Sep 17 00:00:00 2001
From: Catalin Ghimici <152162343+catalinsymphony@users.noreply.github.com>
Date: Wed, 5 Nov 2025 19:08:08 +0200
Subject: [PATCH 3/3] generated api for federation service
---
.../local/federation/federation_api.yaml | 7326 +++++++++++++++++
.../bdk/gen/federation_api/companies_api.py | 307 +
.../bdk/gen/federation_api/contact_api.py | 3484 ++++++++
.../gen/federation_api/customer_block_api.py | 1717 ++++
.../federation_api/customer_contact_api.py | 623 ++
.../gen/federation_api/customer_invite_api.py | 324 +
.../gen/federation_api/customer_number_api.py | 1692 ++++
.../customer_phone_number_api.py | 353 +
.../customer_pre_entitlements_api.py | 646 ++
.../gen/federation_api/customer_room_api.py | 338 +
.../gen/federation_api/entitlements_api.py | 2099 +++++
.../federation_group_new_api.py | 1235 +++
.../bdk/gen/federation_api/permissions_api.py | 2945 +++++++
symphony/bdk/gen/federation_api/room_api.py | 4350 ++++++++++
symphony/bdk/gen/federation_api/search_api.py | 2539 ++++++
.../add_contact403_response.py | 165 +
.../federation_model/add_contact_response.py | 128 +
.../add_entitlement400_response.py | 165 +
.../add_entitlement409_response.py | 165 +
.../add_entitlementv2_response.py | 133 +
.../add_pre_entitlement400_response.py | 151 +
.../add_pre_entitlement409_response.py | 137 +
.../add_room_member_conflicted.py | 91 +
.../add_room_member_failed.py | 91 +
...dd_room_member_multi_roomv2403_response.py | 137 +
...dd_room_member_multi_roomv2409_response.py | 137 +
.../federation_model/address_already_empty.py | 91 +
.../gen/federation_model/address_request.py | 99 +
.../gen/federation_model/address_response.py | 99 +
.../advisor_already_entitled.py | 91 +
...advisor_already_entitled_for_direct_emp.py | 91 +
...sor_already_has_phone_allocated_problem.py | 91 +
.../advisor_contact_rooms_response.py | 132 +
.../advisor_id_not_provided.py | 91 +
.../gen/federation_model/advisor_not_found.py | 91 +
.../advisor_permission_request.py | 87 +
.../advisor_permission_response.py | 95 +
.../advisor_permissions_response.py | 99 +
...visor_phone_number_already_used_problem.py | 91 +
...dvisor_phone_number_is_required_problem.py | 91 +
...isor_phone_number_not_supported_problem.py | 91 +
.../advisor_still_entitled.py | 91 +
.../advisors_permission_request.py | 91 +
.../advisors_permission_requestv2.py | 91 +
.../advisors_search_response.py | 101 +
.../federation_model/already_room_owner.py | 91 +
.../bdk/gen/federation_model/assigned_to.py | 91 +
.../federation_model/assigned_to_request.py | 87 +
.../block_contact_information.py | 92 +
.../gen/federation_model/blocked_by_item.py | 95 +
.../federation_model/blocking_reason_enum.py | 39 +
.../bulk_advisor_permission_item_response.py | 99 +
.../bulk_advisor_permission_response.py | 95 +
.../gen/federation_model/bulk_item_error.py | 104 +
.../bulk_item_error_parameters.py | 91 +
.../federation_model/bulk_permission_item.py | 99 +
.../federation_model/bulk_removal_status.py | 37 +
.../federation_model/bulk_removal_statusv2.py | 38 +
.../bulk_room_member_item_response.py | 99 +
.../bulk_room_member_item_responsev2.py | 99 +
.../bulk_room_member_multi_room_request.py | 100 +
.../bulk_room_member_multi_room_requestv2.py | 101 +
.../bulk_room_member_response.py | 95 +
.../bulk_room_member_responsev2.py | 95 +
...e_advisors_federation_group404_response.py | 137 +
...lk_update_federation_group_item_request.py | 91 +
...k_update_federation_group_item_response.py | 99 +
.../bulk_update_federation_group_request.py | 96 +
.../bulk_update_federation_group_response.py | 95 +
.../cannot_edit_advisor_own_contact_email.py | 91 +
.../cannot_rename_room_duplicate_room_name.py | 91 +
...sfer_room_ownership_duplicate_room_name.py | 91 +
.../companies_search_response.py | 95 +
.../gen/federation_model/company_not_found.py | 91 +
.../gen/federation_model/company_response.py | 87 +
.../connection_not_accepted.py | 91 +
.../gen/federation_model/contact_not_found.py | 91 +
.../gen/federation_model/contact_request.py | 102 +
.../gen/federation_model/contact_status.py | 42 +
.../gen/federation_model/contacts_response.py | 101 +
.../copy_contact403_response.py | 137 +
.../federation_model/copy_contact_failed.py | 91 +
.../federation_model/copy_contact_response.py | 89 +
.../federation_model/create_account_failed.py | 91 +
.../create_room403_response.py | 151 +
.../federation_model/create_room_failed.py | 91 +
.../create_roomv2400_response.py | 137 +
.../create_roomv2403_response.py | 165 +
.../create_roomv2404_response.py | 137 +
.../current_tenant_has_own_user_copy.py | 91 +
symphony/bdk/gen/federation_model/cursors.py | 89 +
...stomer_block_phone_numbers_item_request.py | 92 +
...tomer_block_phone_numbers_item_response.py | 95 +
.../customer_block_phone_numbers_request.py | 96 +
.../customer_block_phone_numbers_response.py | 95 +
.../customer_contact_request.py | 108 +
.../customer_contact_with_id.py | 93 +
.../customer_contact_with_id_response.py | 94 +
.../customer_contact_with_id_responsev2.py | 94 +
.../customer_contact_with_idv2.py | 87 +
.../customer_contacts_with_id_response.py | 95 +
.../customer_contacts_with_id_responsev2.py | 95 +
...customer_delete_advisor_contact_contact.py | 91 +
...tomer_delete_advisor_contact_responsev2.py | 94 +
...omer_delete_advisor_contacts_responsev2.py | 95 +
.../customer_unblock_phone_numbers_request.py | 87 +
.../customer_update_contacts_request.py | 98 +
.../customer_update_contacts_requestv2.py | 107 +
.../delete_contact_request.py | 91 +
.../delete_contact_requestv2.py | 90 +
.../delete_contact_response.py | 94 +
.../delete_contact_responsev2.py | 94 +
.../delete_contacts_request.py | 95 +
.../delete_contacts_requestv2.py | 95 +
.../delete_contacts_response.py | 95 +
.../delete_contacts_responsev2.py | 95 +
.../different_room_name_required.py | 91 +
.../federation_model/emp_channel_connector.py | 89 +
.../emp_channel_connector_response.py | 91 +
.../enhanced_permission_response.py | 91 +
.../enhanced_permissions_response.py | 95 +
.../gen/federation_model/entitled_response.py | 101 +
.../entitlement_not_found_problem.py | 91 +
.../federation_model/entitlement_request.py | 97 +
.../federation_model/entitlement_response.py | 121 +
.../entitlement_type_not_found_problem.py | 91 +
...entitlement_user_already_exists_problem.py | 91 +
.../federation_model/entitlements_response.py | 92 +
.../gen/federation_model/external_network.py | 101 +
.../external_network_not_found.py | 91 +
.../federated_account_not_found.py | 91 +
.../federation_group_emp_forbidden.py | 91 +
.../federation_group_not_found.py | 91 +
.../federation_model/find_contact_response.py | 115 +
.../find_contact_response_v2.py | 117 +
...d_contact_response_v2_with_block_status.py | 127 +
.../bdk/gen/federation_model/forbidden.py | 91 +
.../gen/federation_model/forbidden_advisor.py | 91 +
.../forbidden_entitlement_type.py | 91 +
.../federation_model/forbidden_onboarder.py | 91 +
.../get_advisor_phone_numbers404_response.py | 137 +
.../get_blocked_phone_numbers_item.py | 92 +
.../get_blocked_phone_numbers_response.py | 95 +
...tible_external_network_and_request_body.py | 91 +
.../federation_model/inline_response400.py | 165 +
.../federation_model/inline_response4001.py | 137 +
.../federation_model/inline_response4003.py | 137 +
.../federation_model/inline_response403.py | 151 +
.../federation_model/inline_response4031.py | 165 +
.../federation_model/inline_response4032.py | 137 +
.../federation_model/inline_response4033.py | 151 +
.../federation_model/inline_response4041.py | 137 +
.../federation_model/inline_response4042.py | 151 +
.../federation_model/inline_response4043.py | 137 +
.../federation_model/inline_response4044.py | 151 +
.../federation_model/inline_response4047.py | 165 +
.../federation_model/inline_response4048.py | 165 +
.../federation_model/inline_response4049.py | 151 +
.../federation_model/inline_response409.py | 137 +
.../federation_model/inline_response500.py | 137 +
.../federation_model/invalid_page_cursor.py | 91 +
.../gen/federation_model/invalid_user_info.py | 91 +
.../invite_already_confirmed.py | 91 +
.../invites_not_configured_on_emp.py | 91 +
...able_emp_channel_connectors404_response.py | 151 +
.../federation_model/list_contact_response.py | 101 +
.../list_contacts2403_response.py | 137 +
.../list_contacts2404_response.py | 137 +
.../list_emp_channel_connector_response.py | 95 +
.../list_federation_groups_item_response.py | 91 +
.../list_federation_groups_response.py | 101 +
.../list_roomsv2404_response.py | 137 +
.../member_already_in_room.py | 91 +
.../missing_connection_with_connect_bot.py | 91 +
.../missing_destination_federation_group.py | 91 +
.../multi_company_room_not_supported.py | 91 +
...lti_external_network_room_not_supported.py | 91 +
...ti_tenant_federated_user_update_attempt.py | 91 +
.../multiple_advisor_permission_response.py | 95 +
...ion_response_advisors_permissions_inner.py | 99 +
...sponse_advisors_permissions_inner_error.py | 89 +
...nse_advisors_permissions_inner_response.py | 97 +
...s_permissions_inner_response_permission.py | 87 +
.../multiple_destination_federation_group.py | 91 +
.../federation_model/no_available_number.py | 91 +
.../gen/federation_model/no_field_updated.py | 91 +
.../gen/federation_model/no_numbers_found.py | 91 +
.../gen/federation_model/not_a_room_member.py | 91 +
.../not_applicable_for_external_network.py | 91 +
.../not_entitled_on_direct_emp.py | 91 +
.../federation_model/number_not_available.py | 91 +
.../gen/federation_model/number_not_found.py | 91 +
.../number_registration_not_possible.py | 93 +
.../gen/federation_model/number_response.py | 109 +
.../bdk/gen/federation_model/pagination.py | 95 +
.../permission_already_assigned.py | 91 +
.../federation_model/permission_not_found.py | 91 +
.../federation_model/permission_response.py | 89 +
.../federation_model/permissions_response.py | 87 +
symphony/bdk/gen/federation_model/phone.py | 103 +
...hone_international_onboarding_forbidden.py | 91 +
.../phone_number_already_allocated_problem.py | 91 +
.../gen/federation_model/phone_number_info.py | 127 +
.../phone_number_not_assigned.py | 91 +
.../phone_number_not_found.py | 91 +
...er_pre_allocation_not_supported_problem.py | 91 +
.../phone_numbers_details_response.py | 95 +
.../pre_entitlement_failed.py | 91 +
.../pre_entitlement_not_found.py | 91 +
...ement_permissions_not_supported_problem.py | 91 +
.../pre_entitlement_phone_number_mismatch.py | 91 +
.../pre_entitlement_request.py | 89 +
.../preferred_language_not_supported.py | 91 +
.../reactivate_room_not_implemented.py | 91 +
.../remove_pre_entitlement404_response.py | 137 +
.../remove_room_member_forbidden.py | 91 +
.../remove_room_members_response.py | 87 +
.../remove_room_memberv2403_response.py | 137 +
.../rename_room409_response.py | 165 +
.../federation_model/rename_room_failed.py | 91 +
.../federation_model/rename_room_forbidden.py | 91 +
.../federation_model/rename_room_request.py | 88 +
.../federation_model/rename_room_response.py | 91 +
.../resend_invite400_response.py | 137 +
.../federation_model/resend_invite_failed.py | 91 +
.../resend_invite_response.py | 87 +
.../bdk/gen/federation_model/rfc_error.py | 96 +
.../federation_model/room_already_exists.py | 91 +
.../room_basic_information.py | 93 +
.../room_creation_response.py | 112 +
.../room_creation_response_v2.py | 114 +
.../federation_model/room_features_request.py | 87 +
.../federation_model/room_is_deactivated.py | 98 +
.../room_member_multi_room_request.py | 91 +
.../room_member_multi_room_requestv2.py | 92 +
.../federation_model/room_member_not_found.py | 91 +
.../federation_model/room_member_request.py | 95 +
.../federation_model/room_member_requestv2.py | 96 +
.../federation_model/room_member_response.py | 113 +
.../federation_model/room_members_response.py | 101 +
.../gen/federation_model/room_not_found.py | 91 +
.../bdk/gen/federation_model/room_request.py | 92 +
.../gen/federation_model/room_requestv2.py | 97 +
.../bdk/gen/federation_model/room_response.py | 132 +
.../room_set_activity_request.py | 87 +
.../room_set_activity_response.py | 99 +
.../room_set_federation_group_request.py | 89 +
.../room_update_federation_group_errors.py | 101 +
...te_federation_group_errors_errors_inner.py | 91 +
.../gen/federation_model/rooms_response.py | 101 +
.../search_contact_response.py | 141 +
.../search_contacts_response.py | 101 +
.../subnetwork_not_implemented.py | 91 +
.../symphony_user_not_found_problem.py | 91 +
.../tenant_configuration_not_found.py | 91 +
.../gen/federation_model/tenant_not_found.py | 91 +
.../transfer_room_ownership404_response.py | 151 +
.../transfer_room_ownership409_response.py | 165 +
.../transfer_room_ownership_request.py | 88 +
.../bdk/gen/federation_model/unauthorized.py | 91 +
.../federation_model/update_account_failed.py | 91 +
...te_advisor_federation_group400_response.py | 151 +
...te_advisor_federation_group404_response.py | 137 +
.../update_contact_request.py | 91 +
.../update_contact_response.py | 91 +
.../update_contacts_request.py | 96 +
.../update_contacts_response.py | 101 +
.../update_contacts_response_v2.py | 101 +
.../update_contactsv2403_response.py | 151 +
.../update_federation_group_request.py | 89 +
.../update_federation_group_response.py | 91 +
.../update_forbidden_for_advisor.py | 91 +
.../update_forbidden_for_contact.py | 91 +
.../federation_model/update_number_request.py | 91 +
.../update_phone_number403_response.py | 137 +
...date_room_federation_groups400_response.py | 137 +
...date_room_federation_groups404_response.py | 137 +
.../update_room_status_failed.py | 91 +
.../federation_model/user_already_exists.py | 91 +
.../user_already_onboarded.py | 91 +
.../user_copy_not_supported_for_ims.py | 91 +
.../user_copy_not_supported_for_network.py | 91 +
.../gen/federation_model/user_id_mismatch.py | 91 +
symphony/bdk/gen/models/__init__.py | 268 +
284 files changed, 57820 insertions(+)
create mode 100644 api_client_generation/local/federation/federation_api.yaml
create mode 100644 symphony/bdk/gen/federation_api/companies_api.py
create mode 100644 symphony/bdk/gen/federation_api/contact_api.py
create mode 100644 symphony/bdk/gen/federation_api/customer_block_api.py
create mode 100644 symphony/bdk/gen/federation_api/customer_contact_api.py
create mode 100644 symphony/bdk/gen/federation_api/customer_invite_api.py
create mode 100644 symphony/bdk/gen/federation_api/customer_number_api.py
create mode 100644 symphony/bdk/gen/federation_api/customer_phone_number_api.py
create mode 100644 symphony/bdk/gen/federation_api/customer_pre_entitlements_api.py
create mode 100644 symphony/bdk/gen/federation_api/customer_room_api.py
create mode 100644 symphony/bdk/gen/federation_api/entitlements_api.py
create mode 100644 symphony/bdk/gen/federation_api/federation_group_new_api.py
create mode 100644 symphony/bdk/gen/federation_api/permissions_api.py
create mode 100644 symphony/bdk/gen/federation_api/room_api.py
create mode 100644 symphony/bdk/gen/federation_api/search_api.py
create mode 100644 symphony/bdk/gen/federation_model/add_contact403_response.py
create mode 100644 symphony/bdk/gen/federation_model/add_contact_response.py
create mode 100644 symphony/bdk/gen/federation_model/add_entitlement400_response.py
create mode 100644 symphony/bdk/gen/federation_model/add_entitlement409_response.py
create mode 100644 symphony/bdk/gen/federation_model/add_entitlementv2_response.py
create mode 100644 symphony/bdk/gen/federation_model/add_pre_entitlement400_response.py
create mode 100644 symphony/bdk/gen/federation_model/add_pre_entitlement409_response.py
create mode 100644 symphony/bdk/gen/federation_model/add_room_member_conflicted.py
create mode 100644 symphony/bdk/gen/federation_model/add_room_member_failed.py
create mode 100644 symphony/bdk/gen/federation_model/add_room_member_multi_roomv2403_response.py
create mode 100644 symphony/bdk/gen/federation_model/add_room_member_multi_roomv2409_response.py
create mode 100644 symphony/bdk/gen/federation_model/address_already_empty.py
create mode 100644 symphony/bdk/gen/federation_model/address_request.py
create mode 100644 symphony/bdk/gen/federation_model/address_response.py
create mode 100644 symphony/bdk/gen/federation_model/advisor_already_entitled.py
create mode 100644 symphony/bdk/gen/federation_model/advisor_already_entitled_for_direct_emp.py
create mode 100644 symphony/bdk/gen/federation_model/advisor_already_has_phone_allocated_problem.py
create mode 100644 symphony/bdk/gen/federation_model/advisor_contact_rooms_response.py
create mode 100644 symphony/bdk/gen/federation_model/advisor_id_not_provided.py
create mode 100644 symphony/bdk/gen/federation_model/advisor_not_found.py
create mode 100644 symphony/bdk/gen/federation_model/advisor_permission_request.py
create mode 100644 symphony/bdk/gen/federation_model/advisor_permission_response.py
create mode 100644 symphony/bdk/gen/federation_model/advisor_permissions_response.py
create mode 100644 symphony/bdk/gen/federation_model/advisor_phone_number_already_used_problem.py
create mode 100644 symphony/bdk/gen/federation_model/advisor_phone_number_is_required_problem.py
create mode 100644 symphony/bdk/gen/federation_model/advisor_phone_number_not_supported_problem.py
create mode 100644 symphony/bdk/gen/federation_model/advisor_still_entitled.py
create mode 100644 symphony/bdk/gen/federation_model/advisors_permission_request.py
create mode 100644 symphony/bdk/gen/federation_model/advisors_permission_requestv2.py
create mode 100644 symphony/bdk/gen/federation_model/advisors_search_response.py
create mode 100644 symphony/bdk/gen/federation_model/already_room_owner.py
create mode 100644 symphony/bdk/gen/federation_model/assigned_to.py
create mode 100644 symphony/bdk/gen/federation_model/assigned_to_request.py
create mode 100644 symphony/bdk/gen/federation_model/block_contact_information.py
create mode 100644 symphony/bdk/gen/federation_model/blocked_by_item.py
create mode 100644 symphony/bdk/gen/federation_model/blocking_reason_enum.py
create mode 100644 symphony/bdk/gen/federation_model/bulk_advisor_permission_item_response.py
create mode 100644 symphony/bdk/gen/federation_model/bulk_advisor_permission_response.py
create mode 100644 symphony/bdk/gen/federation_model/bulk_item_error.py
create mode 100644 symphony/bdk/gen/federation_model/bulk_item_error_parameters.py
create mode 100644 symphony/bdk/gen/federation_model/bulk_permission_item.py
create mode 100644 symphony/bdk/gen/federation_model/bulk_removal_status.py
create mode 100644 symphony/bdk/gen/federation_model/bulk_removal_statusv2.py
create mode 100644 symphony/bdk/gen/federation_model/bulk_room_member_item_response.py
create mode 100644 symphony/bdk/gen/federation_model/bulk_room_member_item_responsev2.py
create mode 100644 symphony/bdk/gen/federation_model/bulk_room_member_multi_room_request.py
create mode 100644 symphony/bdk/gen/federation_model/bulk_room_member_multi_room_requestv2.py
create mode 100644 symphony/bdk/gen/federation_model/bulk_room_member_response.py
create mode 100644 symphony/bdk/gen/federation_model/bulk_room_member_responsev2.py
create mode 100644 symphony/bdk/gen/federation_model/bulk_update_advisors_federation_group404_response.py
create mode 100644 symphony/bdk/gen/federation_model/bulk_update_federation_group_item_request.py
create mode 100644 symphony/bdk/gen/federation_model/bulk_update_federation_group_item_response.py
create mode 100644 symphony/bdk/gen/federation_model/bulk_update_federation_group_request.py
create mode 100644 symphony/bdk/gen/federation_model/bulk_update_federation_group_response.py
create mode 100644 symphony/bdk/gen/federation_model/cannot_edit_advisor_own_contact_email.py
create mode 100644 symphony/bdk/gen/federation_model/cannot_rename_room_duplicate_room_name.py
create mode 100644 symphony/bdk/gen/federation_model/cannot_transfer_room_ownership_duplicate_room_name.py
create mode 100644 symphony/bdk/gen/federation_model/companies_search_response.py
create mode 100644 symphony/bdk/gen/federation_model/company_not_found.py
create mode 100644 symphony/bdk/gen/federation_model/company_response.py
create mode 100644 symphony/bdk/gen/federation_model/connection_not_accepted.py
create mode 100644 symphony/bdk/gen/federation_model/contact_not_found.py
create mode 100644 symphony/bdk/gen/federation_model/contact_request.py
create mode 100644 symphony/bdk/gen/federation_model/contact_status.py
create mode 100644 symphony/bdk/gen/federation_model/contacts_response.py
create mode 100644 symphony/bdk/gen/federation_model/copy_contact403_response.py
create mode 100644 symphony/bdk/gen/federation_model/copy_contact_failed.py
create mode 100644 symphony/bdk/gen/federation_model/copy_contact_response.py
create mode 100644 symphony/bdk/gen/federation_model/create_account_failed.py
create mode 100644 symphony/bdk/gen/federation_model/create_room403_response.py
create mode 100644 symphony/bdk/gen/federation_model/create_room_failed.py
create mode 100644 symphony/bdk/gen/federation_model/create_roomv2400_response.py
create mode 100644 symphony/bdk/gen/federation_model/create_roomv2403_response.py
create mode 100644 symphony/bdk/gen/federation_model/create_roomv2404_response.py
create mode 100644 symphony/bdk/gen/federation_model/current_tenant_has_own_user_copy.py
create mode 100644 symphony/bdk/gen/federation_model/cursors.py
create mode 100644 symphony/bdk/gen/federation_model/customer_block_phone_numbers_item_request.py
create mode 100644 symphony/bdk/gen/federation_model/customer_block_phone_numbers_item_response.py
create mode 100644 symphony/bdk/gen/federation_model/customer_block_phone_numbers_request.py
create mode 100644 symphony/bdk/gen/federation_model/customer_block_phone_numbers_response.py
create mode 100644 symphony/bdk/gen/federation_model/customer_contact_request.py
create mode 100644 symphony/bdk/gen/federation_model/customer_contact_with_id.py
create mode 100644 symphony/bdk/gen/federation_model/customer_contact_with_id_response.py
create mode 100644 symphony/bdk/gen/federation_model/customer_contact_with_id_responsev2.py
create mode 100644 symphony/bdk/gen/federation_model/customer_contact_with_idv2.py
create mode 100644 symphony/bdk/gen/federation_model/customer_contacts_with_id_response.py
create mode 100644 symphony/bdk/gen/federation_model/customer_contacts_with_id_responsev2.py
create mode 100644 symphony/bdk/gen/federation_model/customer_delete_advisor_contact_contact.py
create mode 100644 symphony/bdk/gen/federation_model/customer_delete_advisor_contact_responsev2.py
create mode 100644 symphony/bdk/gen/federation_model/customer_delete_advisor_contacts_responsev2.py
create mode 100644 symphony/bdk/gen/federation_model/customer_unblock_phone_numbers_request.py
create mode 100644 symphony/bdk/gen/federation_model/customer_update_contacts_request.py
create mode 100644 symphony/bdk/gen/federation_model/customer_update_contacts_requestv2.py
create mode 100644 symphony/bdk/gen/federation_model/delete_contact_request.py
create mode 100644 symphony/bdk/gen/federation_model/delete_contact_requestv2.py
create mode 100644 symphony/bdk/gen/federation_model/delete_contact_response.py
create mode 100644 symphony/bdk/gen/federation_model/delete_contact_responsev2.py
create mode 100644 symphony/bdk/gen/federation_model/delete_contacts_request.py
create mode 100644 symphony/bdk/gen/federation_model/delete_contacts_requestv2.py
create mode 100644 symphony/bdk/gen/federation_model/delete_contacts_response.py
create mode 100644 symphony/bdk/gen/federation_model/delete_contacts_responsev2.py
create mode 100644 symphony/bdk/gen/federation_model/different_room_name_required.py
create mode 100644 symphony/bdk/gen/federation_model/emp_channel_connector.py
create mode 100644 symphony/bdk/gen/federation_model/emp_channel_connector_response.py
create mode 100644 symphony/bdk/gen/federation_model/enhanced_permission_response.py
create mode 100644 symphony/bdk/gen/federation_model/enhanced_permissions_response.py
create mode 100644 symphony/bdk/gen/federation_model/entitled_response.py
create mode 100644 symphony/bdk/gen/federation_model/entitlement_not_found_problem.py
create mode 100644 symphony/bdk/gen/federation_model/entitlement_request.py
create mode 100644 symphony/bdk/gen/federation_model/entitlement_response.py
create mode 100644 symphony/bdk/gen/federation_model/entitlement_type_not_found_problem.py
create mode 100644 symphony/bdk/gen/federation_model/entitlement_user_already_exists_problem.py
create mode 100644 symphony/bdk/gen/federation_model/entitlements_response.py
create mode 100644 symphony/bdk/gen/federation_model/external_network.py
create mode 100644 symphony/bdk/gen/federation_model/external_network_not_found.py
create mode 100644 symphony/bdk/gen/federation_model/federated_account_not_found.py
create mode 100644 symphony/bdk/gen/federation_model/federation_group_emp_forbidden.py
create mode 100644 symphony/bdk/gen/federation_model/federation_group_not_found.py
create mode 100644 symphony/bdk/gen/federation_model/find_contact_response.py
create mode 100644 symphony/bdk/gen/federation_model/find_contact_response_v2.py
create mode 100644 symphony/bdk/gen/federation_model/find_contact_response_v2_with_block_status.py
create mode 100644 symphony/bdk/gen/federation_model/forbidden.py
create mode 100644 symphony/bdk/gen/federation_model/forbidden_advisor.py
create mode 100644 symphony/bdk/gen/federation_model/forbidden_entitlement_type.py
create mode 100644 symphony/bdk/gen/federation_model/forbidden_onboarder.py
create mode 100644 symphony/bdk/gen/federation_model/get_advisor_phone_numbers404_response.py
create mode 100644 symphony/bdk/gen/federation_model/get_blocked_phone_numbers_item.py
create mode 100644 symphony/bdk/gen/federation_model/get_blocked_phone_numbers_response.py
create mode 100644 symphony/bdk/gen/federation_model/incompatible_external_network_and_request_body.py
create mode 100644 symphony/bdk/gen/federation_model/inline_response400.py
create mode 100644 symphony/bdk/gen/federation_model/inline_response4001.py
create mode 100644 symphony/bdk/gen/federation_model/inline_response4003.py
create mode 100644 symphony/bdk/gen/federation_model/inline_response403.py
create mode 100644 symphony/bdk/gen/federation_model/inline_response4031.py
create mode 100644 symphony/bdk/gen/federation_model/inline_response4032.py
create mode 100644 symphony/bdk/gen/federation_model/inline_response4033.py
create mode 100644 symphony/bdk/gen/federation_model/inline_response4041.py
create mode 100644 symphony/bdk/gen/federation_model/inline_response4042.py
create mode 100644 symphony/bdk/gen/federation_model/inline_response4043.py
create mode 100644 symphony/bdk/gen/federation_model/inline_response4044.py
create mode 100644 symphony/bdk/gen/federation_model/inline_response4047.py
create mode 100644 symphony/bdk/gen/federation_model/inline_response4048.py
create mode 100644 symphony/bdk/gen/federation_model/inline_response4049.py
create mode 100644 symphony/bdk/gen/federation_model/inline_response409.py
create mode 100644 symphony/bdk/gen/federation_model/inline_response500.py
create mode 100644 symphony/bdk/gen/federation_model/invalid_page_cursor.py
create mode 100644 symphony/bdk/gen/federation_model/invalid_user_info.py
create mode 100644 symphony/bdk/gen/federation_model/invite_already_confirmed.py
create mode 100644 symphony/bdk/gen/federation_model/invites_not_configured_on_emp.py
create mode 100644 symphony/bdk/gen/federation_model/list_available_emp_channel_connectors404_response.py
create mode 100644 symphony/bdk/gen/federation_model/list_contact_response.py
create mode 100644 symphony/bdk/gen/federation_model/list_contacts2403_response.py
create mode 100644 symphony/bdk/gen/federation_model/list_contacts2404_response.py
create mode 100644 symphony/bdk/gen/federation_model/list_emp_channel_connector_response.py
create mode 100644 symphony/bdk/gen/federation_model/list_federation_groups_item_response.py
create mode 100644 symphony/bdk/gen/federation_model/list_federation_groups_response.py
create mode 100644 symphony/bdk/gen/federation_model/list_roomsv2404_response.py
create mode 100644 symphony/bdk/gen/federation_model/member_already_in_room.py
create mode 100644 symphony/bdk/gen/federation_model/missing_connection_with_connect_bot.py
create mode 100644 symphony/bdk/gen/federation_model/missing_destination_federation_group.py
create mode 100644 symphony/bdk/gen/federation_model/multi_company_room_not_supported.py
create mode 100644 symphony/bdk/gen/federation_model/multi_external_network_room_not_supported.py
create mode 100644 symphony/bdk/gen/federation_model/multi_tenant_federated_user_update_attempt.py
create mode 100644 symphony/bdk/gen/federation_model/multiple_advisor_permission_response.py
create mode 100644 symphony/bdk/gen/federation_model/multiple_advisor_permission_response_advisors_permissions_inner.py
create mode 100644 symphony/bdk/gen/federation_model/multiple_advisor_permission_response_advisors_permissions_inner_error.py
create mode 100644 symphony/bdk/gen/federation_model/multiple_advisor_permission_response_advisors_permissions_inner_response.py
create mode 100644 symphony/bdk/gen/federation_model/multiple_advisor_permission_response_advisors_permissions_inner_response_permission.py
create mode 100644 symphony/bdk/gen/federation_model/multiple_destination_federation_group.py
create mode 100644 symphony/bdk/gen/federation_model/no_available_number.py
create mode 100644 symphony/bdk/gen/federation_model/no_field_updated.py
create mode 100644 symphony/bdk/gen/federation_model/no_numbers_found.py
create mode 100644 symphony/bdk/gen/federation_model/not_a_room_member.py
create mode 100644 symphony/bdk/gen/federation_model/not_applicable_for_external_network.py
create mode 100644 symphony/bdk/gen/federation_model/not_entitled_on_direct_emp.py
create mode 100644 symphony/bdk/gen/federation_model/number_not_available.py
create mode 100644 symphony/bdk/gen/federation_model/number_not_found.py
create mode 100644 symphony/bdk/gen/federation_model/number_registration_not_possible.py
create mode 100644 symphony/bdk/gen/federation_model/number_response.py
create mode 100644 symphony/bdk/gen/federation_model/pagination.py
create mode 100644 symphony/bdk/gen/federation_model/permission_already_assigned.py
create mode 100644 symphony/bdk/gen/federation_model/permission_not_found.py
create mode 100644 symphony/bdk/gen/federation_model/permission_response.py
create mode 100644 symphony/bdk/gen/federation_model/permissions_response.py
create mode 100644 symphony/bdk/gen/federation_model/phone.py
create mode 100644 symphony/bdk/gen/federation_model/phone_international_onboarding_forbidden.py
create mode 100644 symphony/bdk/gen/federation_model/phone_number_already_allocated_problem.py
create mode 100644 symphony/bdk/gen/federation_model/phone_number_info.py
create mode 100644 symphony/bdk/gen/federation_model/phone_number_not_assigned.py
create mode 100644 symphony/bdk/gen/federation_model/phone_number_not_found.py
create mode 100644 symphony/bdk/gen/federation_model/phone_number_pre_allocation_not_supported_problem.py
create mode 100644 symphony/bdk/gen/federation_model/phone_numbers_details_response.py
create mode 100644 symphony/bdk/gen/federation_model/pre_entitlement_failed.py
create mode 100644 symphony/bdk/gen/federation_model/pre_entitlement_not_found.py
create mode 100644 symphony/bdk/gen/federation_model/pre_entitlement_permissions_not_supported_problem.py
create mode 100644 symphony/bdk/gen/federation_model/pre_entitlement_phone_number_mismatch.py
create mode 100644 symphony/bdk/gen/federation_model/pre_entitlement_request.py
create mode 100644 symphony/bdk/gen/federation_model/preferred_language_not_supported.py
create mode 100644 symphony/bdk/gen/federation_model/reactivate_room_not_implemented.py
create mode 100644 symphony/bdk/gen/federation_model/remove_pre_entitlement404_response.py
create mode 100644 symphony/bdk/gen/federation_model/remove_room_member_forbidden.py
create mode 100644 symphony/bdk/gen/federation_model/remove_room_members_response.py
create mode 100644 symphony/bdk/gen/federation_model/remove_room_memberv2403_response.py
create mode 100644 symphony/bdk/gen/federation_model/rename_room409_response.py
create mode 100644 symphony/bdk/gen/federation_model/rename_room_failed.py
create mode 100644 symphony/bdk/gen/federation_model/rename_room_forbidden.py
create mode 100644 symphony/bdk/gen/federation_model/rename_room_request.py
create mode 100644 symphony/bdk/gen/federation_model/rename_room_response.py
create mode 100644 symphony/bdk/gen/federation_model/resend_invite400_response.py
create mode 100644 symphony/bdk/gen/federation_model/resend_invite_failed.py
create mode 100644 symphony/bdk/gen/federation_model/resend_invite_response.py
create mode 100644 symphony/bdk/gen/federation_model/rfc_error.py
create mode 100644 symphony/bdk/gen/federation_model/room_already_exists.py
create mode 100644 symphony/bdk/gen/federation_model/room_basic_information.py
create mode 100644 symphony/bdk/gen/federation_model/room_creation_response.py
create mode 100644 symphony/bdk/gen/federation_model/room_creation_response_v2.py
create mode 100644 symphony/bdk/gen/federation_model/room_features_request.py
create mode 100644 symphony/bdk/gen/federation_model/room_is_deactivated.py
create mode 100644 symphony/bdk/gen/federation_model/room_member_multi_room_request.py
create mode 100644 symphony/bdk/gen/federation_model/room_member_multi_room_requestv2.py
create mode 100644 symphony/bdk/gen/federation_model/room_member_not_found.py
create mode 100644 symphony/bdk/gen/federation_model/room_member_request.py
create mode 100644 symphony/bdk/gen/federation_model/room_member_requestv2.py
create mode 100644 symphony/bdk/gen/federation_model/room_member_response.py
create mode 100644 symphony/bdk/gen/federation_model/room_members_response.py
create mode 100644 symphony/bdk/gen/federation_model/room_not_found.py
create mode 100644 symphony/bdk/gen/federation_model/room_request.py
create mode 100644 symphony/bdk/gen/federation_model/room_requestv2.py
create mode 100644 symphony/bdk/gen/federation_model/room_response.py
create mode 100644 symphony/bdk/gen/federation_model/room_set_activity_request.py
create mode 100644 symphony/bdk/gen/federation_model/room_set_activity_response.py
create mode 100644 symphony/bdk/gen/federation_model/room_set_federation_group_request.py
create mode 100644 symphony/bdk/gen/federation_model/room_update_federation_group_errors.py
create mode 100644 symphony/bdk/gen/federation_model/room_update_federation_group_errors_errors_inner.py
create mode 100644 symphony/bdk/gen/federation_model/rooms_response.py
create mode 100644 symphony/bdk/gen/federation_model/search_contact_response.py
create mode 100644 symphony/bdk/gen/federation_model/search_contacts_response.py
create mode 100644 symphony/bdk/gen/federation_model/subnetwork_not_implemented.py
create mode 100644 symphony/bdk/gen/federation_model/symphony_user_not_found_problem.py
create mode 100644 symphony/bdk/gen/federation_model/tenant_configuration_not_found.py
create mode 100644 symphony/bdk/gen/federation_model/tenant_not_found.py
create mode 100644 symphony/bdk/gen/federation_model/transfer_room_ownership404_response.py
create mode 100644 symphony/bdk/gen/federation_model/transfer_room_ownership409_response.py
create mode 100644 symphony/bdk/gen/federation_model/transfer_room_ownership_request.py
create mode 100644 symphony/bdk/gen/federation_model/unauthorized.py
create mode 100644 symphony/bdk/gen/federation_model/update_account_failed.py
create mode 100644 symphony/bdk/gen/federation_model/update_advisor_federation_group400_response.py
create mode 100644 symphony/bdk/gen/federation_model/update_advisor_federation_group404_response.py
create mode 100644 symphony/bdk/gen/federation_model/update_contact_request.py
create mode 100644 symphony/bdk/gen/federation_model/update_contact_response.py
create mode 100644 symphony/bdk/gen/federation_model/update_contacts_request.py
create mode 100644 symphony/bdk/gen/federation_model/update_contacts_response.py
create mode 100644 symphony/bdk/gen/federation_model/update_contacts_response_v2.py
create mode 100644 symphony/bdk/gen/federation_model/update_contactsv2403_response.py
create mode 100644 symphony/bdk/gen/federation_model/update_federation_group_request.py
create mode 100644 symphony/bdk/gen/federation_model/update_federation_group_response.py
create mode 100644 symphony/bdk/gen/federation_model/update_forbidden_for_advisor.py
create mode 100644 symphony/bdk/gen/federation_model/update_forbidden_for_contact.py
create mode 100644 symphony/bdk/gen/federation_model/update_number_request.py
create mode 100644 symphony/bdk/gen/federation_model/update_phone_number403_response.py
create mode 100644 symphony/bdk/gen/federation_model/update_room_federation_groups400_response.py
create mode 100644 symphony/bdk/gen/federation_model/update_room_federation_groups404_response.py
create mode 100644 symphony/bdk/gen/federation_model/update_room_status_failed.py
create mode 100644 symphony/bdk/gen/federation_model/user_already_exists.py
create mode 100644 symphony/bdk/gen/federation_model/user_already_onboarded.py
create mode 100644 symphony/bdk/gen/federation_model/user_copy_not_supported_for_ims.py
create mode 100644 symphony/bdk/gen/federation_model/user_copy_not_supported_for_network.py
create mode 100644 symphony/bdk/gen/federation_model/user_id_mismatch.py
diff --git a/api_client_generation/local/federation/federation_api.yaml b/api_client_generation/local/federation/federation_api.yaml
new file mode 100644
index 00000000..ceec9b5e
--- /dev/null
+++ b/api_client_generation/local/federation/federation_api.yaml
@@ -0,0 +1,7326 @@
+openapi: 3.0.0
+info:
+ title: SFS MS Admin API
+ description: see https://symphony-1.gitbook.io/federation/
+
+ version: 0.0.1
+
+servers:
+ - url: https://CONNECT-DOMAIN
+
+tags:
+ - name: Entitlements
+ description:
+ This API provides endpoints to add or remove advisor entitlements.
+
Entitlements allow an advisor to use an external network such as WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE.
+
+ - name: Contact
+ description:
+ This API provides endpoints to manage Contacts. A Contact is a client of the WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE network (also referred as external network). Advisor, a user of the Symphony connect platform. A contact represents the relation between an external user (a WhatsApp, Wechat, SMS, SMS Direct or LINE user), and an advisor.
+ When an advisor onboards, or adds an external user, they become one of their contacts
+
+ - name: Permissions
+ description:
+ An API for managing permissions. Permissions give an advisor the ability to perform certain actions, for example creating a room.
+ Note: Permissions are more specific than entitlements.
+ An entitlement gives an advisor the right to use an external network (for example, Wechat) whereas a permission gives access to a specific functionality within that external network. An entitlement is a precondiction for a permission.
+ If you want to grant the permission "create:room" to an advisor on WhatsApp, the advisor must have the WHATSAPP entitlement.
+
+paths:
+ /api/v2/customer/entitlements:
+ get:
+ tags:
+ - Entitlements
+ summary: List entitlements (recommended)
+ description: |
+ List the available entitlements.
+ operationId: listEntitlements
+ responses:
+ "200":
+ description: List of found entitlements
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/entitlements-response"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "403":
+ description: Operation forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_403_0"
+ security:
+ - sfsAuthentication: []
+ post:
+ tags:
+ - Entitlements
+ summary: Add entitlement (recommended)
+ description: Entitle a Symphony user to use the external network.
+ operationId: addEntitlement
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/entitlement-request"
+ responses:
+ "201":
+ description: The user has successfully been added in the list of entitlements.
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/add-entitlementv2-response"
+ "400":
+ description: Missing or malformed input
+ content:
+ application/json:
+ schema:
+ oneOf:
+ - $ref: "#/components/schemas/inline_response_400"
+ - $ref: "#/components/schemas/advisor-phone-number-not-supported-problem"
+ - $ref: "#/components/schemas/advisor-phone-number-is-required-problem"
+ - $ref: "#/components/schemas/pre-entitlement-permissions-not-supported-problem"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "403":
+ description: Add user forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/forbidden-entitlement-type"
+ "404":
+ description: Not found
+ content:
+ application/json:
+ schema:
+ oneOf:
+ - $ref: "#/components/schemas/tenant-configuration-not-found"
+ "409":
+ description: Conflict
+ content:
+ application/json:
+ schema:
+ oneOf:
+ - $ref: "#/components/schemas/advisor-phone-number-already-used-problem"
+ - $ref: "#/components/schemas/pre-entitlement-phone-number-mismatch"
+ - $ref: "#/components/schemas/number-not-available"
+ - $ref: "#/components/schemas/number-registration-not-possible"
+ "500":
+ description: Server error (SMS-Direct Second Number only)
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/no-available-number"
+
+ security:
+ - sfsAuthentication: []
+
+ /api/v1/customer/pre-entitlements/{symphonyId}/externalNetwork/{externalNetwork}:
+ post:
+ deprecated: true
+ tags:
+ - Customer pre-entitlements
+ summary: (deprecated) Pre-entitle an advisor to a phone number (WhatsApp Direct only)
+ operationId: addPreEntitlement
+ description: |
+ Pre-allocate a phone number to an advisor to allow the advisor to activate their phone number.
+ Supported on WhatsApp Direct only
+ Umony numbers are not eligible for pre-entitlements. Symphony users using Umony numbers can skip the pre-entitlement step and be entitled directly.
+ security:
+ - sfsAuthentication: [ ]
+ parameters:
+ - in: path
+ required: true
+ name: symphonyId
+ schema:
+ type: string
+ pattern: '^\d+$'
+ description: Symphony User Id
+ - in: path
+ required: true
+ name: externalNetwork
+ schema:
+ type: string
+ description: 'External network: WHATSAPP-DIRECT'
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/pre-entitlement-request'
+ responses:
+ '200':
+ description: The phone number has been successfully allocated to the user.
+ '409':
+ description: Missing or malformed input
+ content:
+ application/json:
+ schema:
+ oneOf:
+ - $ref: '#/components/schemas/advisor-already-has-phone-allocated-problem'
+ - $ref: '#/components/schemas/phone-number-already-allocated-problem'
+ '404':
+ description: Not Found
+ content:
+ application/json:
+ schema:
+ oneOf:
+ - $ref: '#/components/schemas/tenant-configuration-not-found'
+ '400':
+ description: Missing or malformed input
+ content:
+ application/json:
+ schema:
+ oneOf:
+ - $ref: '#/components/schemas/symphony-user-not-found-problem'
+ - $ref: '#/components/schemas/entitlement-type-not-found-problem'
+ - $ref: '#/components/schemas/phone-number-pre-allocation-not-supported-problem'
+ '500':
+ description: Pre-entitlement Failed
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/pre-entitlement-failed'
+ delete:
+ deprecated: true
+ tags:
+ - Customer pre-entitlements
+ summary: (deprecated) Remove an advisor pre-entitlement (WhatsApp Direct only)
+ operationId: removePreEntitlement
+ description: |
+ Remove an advisor pre-entitlement
+ Supported on WhatsApp Direct only
+ security:
+ - sfsAuthentication: [ ]
+ parameters:
+ - in: path
+ required: true
+ name: symphonyId
+ schema:
+ type: string
+ pattern: '^\d+$'
+ description: Symphony User Id
+ - in: path
+ required: true
+ name: externalNetwork
+ schema:
+ type: string
+ description: 'External network: WHATSAPP-DIRECT'
+ responses:
+ '200':
+ description: The pre-entitlement has been removed successfully.
+ '404':
+ description: Not Found
+ content:
+ application/json:
+ schema:
+ oneOf:
+ - $ref: '#/components/schemas/tenant-configuration-not-found'
+ - $ref: '#/components/schemas/pre-entitlement-not-found'
+ '403':
+ description: Forbidden
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/advisor-already-entitled'
+
+ '400':
+ description: Missing or malformed input
+ content:
+ application/json:
+ schema:
+ oneOf:
+ - $ref: '#/components/schemas/entitlement-type-not-found-problem'
+
+ /api/v1/customer/entitlements/externalNetwork/{externalNetwork}/advisors:
+ get:
+ tags:
+ - Entitlements
+ summary: List entitled advisors
+ description: |
+ List all entitled advisors on a given external network.
+ operationId: listEntitledAdvisors
+ parameters:
+ - name: externalNetwork
+ in: path
+ required: true
+ description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
+ schema:
+ type: string
+ example: WHATSAPP
+ - name: before
+ in: query
+ description: The before cursor for pagination
+ schema:
+ type: string
+ - name: after
+ in: query
+ description: The after cursor for pagination
+ schema:
+ type: string
+ - in: query
+ name: listPermissions
+ schema:
+ type: boolean
+ default: false
+ required: false
+ example: true
+ description: Boolean query parameter that indicates whether the search API will return the list of permissions per advisor return, or not
+ responses:
+ "200":
+ description: List of found entitled advisors.
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/entitled-response"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "403":
+ description: Operation forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_403_0"
+ security:
+ - sfsAuthentication: []
+ "/api/v2/customer/advisor/entitlements":
+ get:
+ tags:
+ - Entitlements
+ summary: Get an advisor's entitlement (recommended)
+ description: |
+ Check if a given advisor is entitled for a given external network.
+ Advisors can be identified using their email address or their Symphony user ID
+ (if both are provided, the Symphony user ID will take precedence)
+ operationId: getCustomerEntitlement
+ parameters:
+ - name: advisorEmailAddress
+ in: query
+ description: Symphony user email address
+ required: false
+ schema:
+ type: string
+ example: william.smith@symphony.com
+ - name: advisorSymphonyId
+ in: query
+ description: Symphony user ID
+ required: false
+ schema:
+ type: string
+ example: 12345678912365
+ - name: externalNetwork
+ in: query
+ description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
+ required: true
+ schema:
+ type: string
+ example: WHATSAPP
+ responses:
+ "200":
+ description: Advisor data (if an entitled advisor has been found)
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/entitlement-response"
+ '400':
+ description: Missing or malformed input
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/advisor-id-not-provided'
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "403":
+ description: Operation forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_403_0"
+ "404":
+ description: Entitlement not found (if no entitled advisor matching the parameters has been found)
+ content:
+ application/json:
+ schema:
+ oneOf:
+ - $ref: "#/components/schemas/entitlement-not-found-problem"
+ "500":
+ description: No available number
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/no-available-number"
+ security:
+ - sfsAuthentication: []
+ delete:
+ tags:
+ - Entitlements
+ summary: Remove entitlement (recommended)
+ description: |
+ Removes a given advisor's entitlement for a given external network.
+ Advisors can be identified using their email address or their Symphony user ID
+ (if both are provided, the Symphony user ID will take precedence)
+ operationId: deleteCustomerEntitlement
+ parameters:
+ - name: advisorEmailAddress
+ in: query
+ description: Advisor's email address
+ required: false
+ schema:
+ type: string
+ example: william.smith@symphony.com
+ - name: advisorSymphonyId
+ in: query
+ description: Symphony user ID
+ required: false
+ schema:
+ type: string
+ example: 12345678912365
+ - name: externalNetwork
+ in: query
+ description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
+ required: true
+ schema:
+ type: string
+ example: WHATSAPP
+ responses:
+ "200":
+ description: The entitlement has been successfully removed.
+ "404":
+ description: Entitlement not found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/entitlement-not-found-problem"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "403":
+ description: Operation forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_403_0"
+ security:
+ - sfsAuthentication: []
+ "/api/v1/customer/entitlements/{symphonyId}/entitlementType/{entitlementType}":
+ get:
+ deprecated: true
+ tags:
+ - Entitlements
+ summary: Get an advisor's entitlement searching by Symphony user ID for a given external network (deprecated)
+ description: |
+ Get an advisor's entitlement searching by Symphony user ID for a given external network
+ operationId: getCustomerEntitlementBySymphonyId
+ parameters:
+ - name: symphonyId
+ in: path
+ description: Symphony user ID
+ required: true
+ schema:
+ type: string
+ example: 12345678912365
+ - name: entitlementType
+ in: path
+ description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
+ required: true
+ schema:
+ type: string
+ example: WHATSAPP
+ responses:
+ "200":
+ description: Entitlement found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/entitlement-response"
+ "404":
+ description: Entitlement not found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/entitlement-not-found-problem"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "403":
+ description: Operation forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_403_0"
+ security:
+ - sfsAuthentication: []
+ delete:
+ deprecated: true
+ tags:
+ - Entitlements
+ summary: Remove an advisor's entitlement by Symphony user ID for a given external network (deprecated)
+ description: |
+ Remove an advisor's entitlement for a given external network
+ operationId: deleteCustomerEntitlementBySymphonyId
+ parameters:
+ - name: symphonyId
+ in: path
+ description: Symphony user ID
+ required: true
+ schema:
+ type: string
+ example: 12345678912365
+ - name: entitlementType
+ in: path
+ description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
+ required: true
+ schema:
+ type: string
+ example: WHATSAPP
+ responses:
+ "200":
+ description: The entitlement has been successfully removed
+ "404":
+ description: Entitlement not found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/entitlement-not-found-problem"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "403":
+ description: Operation forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_403_0"
+ security:
+ - sfsAuthentication: []
+
+ "/api/v1/customer/advisors/{advisorSymphonyId}/blockedPhoneNumbers":
+ post:
+ tags:
+ - CustomerBlock
+ summary: Block phone numbers
+ operationId: blockPhoneNumbers
+ description: |
+ Block phone numbers for an advisor.
+ security:
+ - sfsAuthentication: [ ]
+ parameters:
+ - in: path
+ name: advisorSymphonyId
+ schema:
+ type: string
+ pattern: '^\d+$'
+ required: true
+ description: The symphonyId for which we are blocking the phone numbers
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/customer-block-phone-numbers-request'
+ responses:
+ '200':
+ description: Request processed
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/customer-block-phone-numbers-response'
+ '403':
+ description: Forbidden
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/not-entitled-on-direct-emp'
+ '404':
+ description: Not found
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/advisor-not-found'
+ get:
+ tags:
+ - CustomerBlock
+ summary: Get blocked phone numbers
+ operationId: getBlockPhoneNumbers
+ description: |
+ Get blocked phone numbers for an advisor.
+ security:
+ - sfsAuthentication: [ ]
+ parameters:
+ - in: path
+ name: advisorSymphonyId
+ schema:
+ type: string
+ pattern: '^\d+$'
+ required: true
+ description: The Symphony ID for which we are getting the blocked phone numbers
+ responses:
+ '200':
+ description: Request processed
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/get-blocked-phone-numbers-response'
+ '403':
+ description: Forbidden
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/not-entitled-on-direct-emp'
+ '404':
+ description: Forbidden
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/advisor-not-found'
+ delete:
+ tags:
+ - CustomerBlock
+ summary: Unblock phone numbers
+ operationId: unblockPhoneNumbers
+ description: |
+ Unblock phone numbers for an advisor.
+ security:
+ - sfsAuthentication: [ ]
+ parameters:
+ - in: path
+ name: advisorSymphonyId
+ schema:
+ type: string
+ pattern: '^\d+$'
+ required: true
+ description: The Symphony ID for which we are unblocking the phone numbers
+ - in: query
+ name: phoneNumbers
+ schema:
+ type: array
+ items:
+ type: string
+ format: phone
+ minItems: 1
+ maxItems: 100
+ required: true
+ description: The phone numbers that we want to unblock for the specified advisor
+ responses:
+ '200':
+ description: Request processed
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/customer-block-phone-numbers-response'
+ '403':
+ description: Forbidden
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/not-entitled-on-direct-emp'
+ '404':
+ description: Not found
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/advisor-not-found'
+
+ "/api/v2/customer/advisors/{advisorSymphonyId}/blockedPhoneNumbers":
+ post:
+ tags:
+ - CustomerBlock
+ summary: Block phone numbers (recommended)
+ operationId: blockPhoneNumbersv2
+ description: |
+ Block phone numbers for an advisor.
+ security:
+ - sfsAuthentication: [ ]
+ parameters:
+ - in: path
+ name: advisorSymphonyId
+ schema:
+ type: string
+ pattern: '^\d+$'
+ required: true
+ description: The symphonyId for which we are blocking the phone numbers
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/customer-block-phone-numbers-request'
+ responses:
+ '200':
+ description: Request processed
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/customer-block-phone-numbers-response'
+ '403':
+ description: Forbidden
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/not-entitled-on-direct-emp'
+ '404':
+ description: Not found
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/advisor-not-found'
+ get:
+ tags:
+ - CustomerBlock
+ summary: Get blocked phone numbers (recommended)
+ operationId: getBlockPhoneNumbersv2
+ description: |
+ Get blocked phone numbers for an advisor.
+ security:
+ - sfsAuthentication: [ ]
+ parameters:
+ - in: path
+ name: advisorSymphonyId
+ schema:
+ type: string
+ pattern: '^\d+$'
+ required: true
+ description: The Symphony ID for which we are getting the blocked phone numbers
+ responses:
+ '200':
+ description: Request processed
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/get-blocked-phone-numbers-response'
+ '403':
+ description: Forbidden
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/not-entitled-on-direct-emp'
+ '404':
+ description: Forbidden
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/advisor-not-found'
+ delete:
+ tags:
+ - CustomerBlock
+ summary: Unblock phone numbers (recommended)
+ operationId: unblockPhoneNumbersv2
+ description: |
+ Unblock phone numbers for an advisor.
+ security:
+ - sfsAuthentication: [ ]
+ parameters:
+ - in: path
+ name: advisorSymphonyId
+ schema:
+ type: string
+ pattern: '^\d+$'
+ required: true
+ description: The Symphony ID for which we are unblocking the phone numbers
+ responses:
+ '200':
+ description: Request processed
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/customer-block-phone-numbers-response'
+ '403':
+ description: Forbidden
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/not-entitled-on-direct-emp'
+ '404':
+ description: Not found
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/advisor-not-found'
+
+ "/api/v2/customer/contacts/{contactSymphonyId}/advisor/{advisorSymphonyId}":
+ delete:
+ tags:
+ - Contact
+ summary: Remove contact (recommended)
+ description: |
+ Remove an advisor's contact searching by the advisor's Symphony user ID and the contact's Symphony user ID
+ operationId: deleteContactv2
+ parameters:
+ - name: advisorSymphonyId
+ in: path
+ description: Advisor's Symphony user ID
+ required: true
+ schema:
+ type: string
+ format: number
+ example: 1234567890
+ - name: contactSymphonyId
+ in: path
+ description: Contact's Symphony user ID
+ required: true
+ schema:
+ type: string
+ format: number
+ example: 1234567890
+ responses:
+ "204":
+ description: Contact successfully removed
+ "404":
+ description: Contact not found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/contact-not-found"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ security:
+ - sfsAuthentication: []
+ "/api/v1/customer/contacts/advisorEmailAddress/{advisorEmailAddress}/contactEmailAddress/{contactEmailAddress}/externalNetwork/{externalNetwork}":
+ delete:
+ deprecated: true
+ tags:
+ - Contact
+ summary: Remove an advisor's contact (deprecated)
+ description: |
+ Remove an advisor's contact searching by the advisor's email address and the contact's email address for a given external network.
+ operationId: deleteContact
+ parameters:
+ - name: advisorEmailAddress
+ in: path
+ description: Advisor's email address
+ required: true
+ schema:
+ type: string
+ format: email
+ example: william.smith@symphony.com
+ - name: contactEmailAddress
+ in: path
+ description: Contact's email address
+ required: true
+ schema:
+ type: string
+ format: email
+ example: johndoe@symphony.com
+ - name: externalNetwork
+ in: path
+ description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
+ required: true
+ schema:
+ type: string
+ example: WHATSAPP
+ responses:
+ "204":
+ description: Contact successfully removed
+ "404":
+ description: Contact not found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/contact-not-found"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "403":
+ description: Operation forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_403_0"
+ security:
+ - sfsAuthentication: []
+ "/api/v2/customer/contacts/{contactSymphonyId}":
+ delete:
+ tags:
+ - Contact
+ summary: Remove the contact from all advisors they are connected to for a given external network (recommended)
+ description: |
+ Remove the contact from all the advisors they are connected to for a given external network.
+ operationId: deleteContactsBySymphonyIdAndExternalNetworkv2
+ parameters:
+ - name: contactSymphonyId
+ in: path
+ description: Contact's Symphony user ID
+ required: true
+ schema:
+ type: string
+ format: number
+ example: 1234567890
+ responses:
+ "200":
+ description: Contact found. The response includes a status report (SUCCESS or FAILURE) of the connection removal for each advisors initially connected to the contact.
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/customer-contactsWithId-responsev2"
+ "404":
+ description: Contact not found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/contact-not-found"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "403":
+ description: Operation forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_403_0"
+ security:
+ - sfsAuthentication: []
+ put:
+ tags:
+ - Contact
+ summary: Update contact (recommended)
+ description: |
+ Update a contact's first name, last name, company name (maximum 100 characters) and, if the advisor has the permission for this, the contact's email address for a given external network.
+ Note: Updating a contact's phone number is not supported.
+ # to be validated
The "advisorEmailAddress" is the email address of the advisor who 1st onboarded the contact.
+ operationId: updateContactsv2
+ parameters:
+ - name: contactSymphonyId
+ in: path
+ description: Contact's Symphony user ID
+ required: true
+ schema:
+ type: string
+ example: 1234567890
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/customer-update-contacts-requestv2"
+ responses:
+ "200":
+ description: Contact successfully updated
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/update-contacts-response-v2"
+ "400":
+ description: Missing or malformed input
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/external-network-not-found"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "403":
+ description: Update user forbidden
+ content:
+ application/json:
+ schema:
+ oneOf:
+ - $ref: "#/components/schemas/inline_response_403_1"
+ - $ref: "#/components/schemas/inline_response_403_0"
+ - $ref: "#/components/schemas/cannot-edit-advisor-own-contact-email"
+ "404":
+ description: Contact not found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_404_4"
+ "409":
+ description: Conflict
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/user-already-exists"
+ "500":
+ description: Contact update failed
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/update-account-failed"
+ security:
+ - sfsAuthentication: []
+ "/api/v1/customer/contacts/{contactSymphonyId}/copy":
+ post:
+ tags:
+ - Contact
+ summary: Copy contact
+ description: |
+ Create a new contact copy.
+ Some contacts might be shared between tenants. Shared contacts updates are not allowed.
+ This API allows to create a contact copy that is dedicated for the requesting tenant and that can be updated.
+
+ Contacts that are created starting from the 23.03 release are already not shared between tenants. This API is dedicated for shared contacts created prior to the 23.03 release.
+
+ Please note:
+
+ - A new account is created for the user, with a new Symphony user ID.
+ - There is no change in the user's data.
+ - The original user account is removed from all rooms and the new account is added to these rooms. Then, a system message is pushed to each room: Maintenance completed on account: {contact first name} {contact last name}. No action on your part is required.
+ - The email format of the user will appear differently in Content Export. Old format: {network}.{phone}@symphony.com. New format: {network}.{phone}.{tenantId}@symphony.com
+ - This API is only supported for WHATSAPP and SMS contacts.
+ - Users who are still part of Symphony IMs cannot be copied. IMs should be first removed from Federation Services.
+ - The copy action is not required for users onboarded by a single tenant before the 23.03 release, or for all users onboarded after 23.03 release.
+
+ operationId: copyContact
+ parameters:
+ - name: contactSymphonyId
+ in: path
+ description: Contact's Symphony ID
+ required: true
+ schema:
+ type: string
+ pattern: '^\d+$'
+ example: 1234567890
+ responses:
+ "200":
+ description: Contact successfully copied
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/copy-contact-response"
+ "400":
+ description: Missing or malformed input
+ content:
+ application/json:
+ schema:
+ oneOf:
+ - $ref: "#/components/schemas/user-copy-not-supported-for-network"
+ "403":
+ description: Copy user forbidden
+ content:
+ application/json:
+ schema:
+ oneOf:
+ - $ref: '#/components/schemas/forbidden-entitlement-type'
+ - $ref: '#/components/schemas/user-copy-not-supported-for-ims'
+ "404":
+ description: Contact not found
+ content:
+ application/json:
+ schema:
+ oneOf:
+ - $ref: "#/components/schemas/contact-not-found"
+ '409':
+ description: Conflict
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/current-tenant-has-own-user-copy'
+ "500":
+ description: Contact update failed
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/copy-contact-failed"
+ security:
+ - sfsAuthentication: []
+ "/api/v1/customer/contacts/contactEmailAddress/{contactEmailAddress}/externalNetwork/{externalNetwork}":
+ delete:
+ deprecated: true
+ tags:
+ - Contact
+ summary: Remove the contact from all advisors they are connected to for a given external network (deprecated)
+ description: |
+ Removes the contact from all the advisors they are connected to, searching by the contact's email address and the external network. This operation will only affect the tenant's advisors.
+ operationId: deleteContactsByEmailAndExternalNetwork
+ parameters:
+ - name: contactEmailAddress
+ in: path
+ description: Contact's email address
+ required: true
+ schema:
+ type: string
+ format: email
+ example: johndoe@symphony.com
+ - name: externalNetwork
+ in: path
+ description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
+ required: true
+ schema:
+ type: string
+ example: WHATSAPP
+ responses:
+ "200":
+ description: Contact found. The response includes a status report (SUCCESS or FAILURE) of the connection removal for each advisor initially connected to the contact.
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/customer-contactsWithId-response"
+ "404":
+ description: Contact not found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/contact-not-found"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "403":
+ description: Operation forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_403_0"
+ security:
+ - sfsAuthentication: []
+ /api/v2/customer/contacts/removal:
+ post:
+ tags:
+ - Contact
+ summary: Bulk remove advisor-contact connection (recommended)
+ description: |
+ Remove specific advisor-contact connections in bulk.
+ operationId: deleteContactsv2
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/deleteContacts-requestv2"
+ responses:
+ "200":
+ description: Contacts found. The response includes a status report (SUCCESS, NOT_FOUND or FAILURE) of the connection removal for each advisor initially connected to each contact in the array of objects.
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/deleteContacts-responsev2"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "403":
+ description: Operation forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_403_0"
+ security:
+ - sfsAuthentication: []
+ /api/v1/customer/contacts/removal:
+ post:
+ deprecated: true
+ tags:
+ - Contact
+ summary: Remove specific advisor-contact connections in bulk (deprecated)
+ description: |
+ Bulk remove the connections between advisor-contact pairs. Takes in the body of the request an array of objects composed of advisor's email address, contact's email address and external network.
+ operationId: deleteContacts
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/deleteContacts-request"
+ responses:
+ "200":
+ description: Contacts found. The response includes a status report (SUCCESS or FAILURE) of the connection removal for each advisor initially connected to each contact in the array of objects.
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/deleteContacts-response"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "403":
+ description: Operation forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_403_0"
+ security:
+ - sfsAuthentication: []
+ "/api/v2/customer/contacts/advisor/{advisorSymphonyId}":
+ delete:
+ tags:
+ - Contact
+ summary: Remove all contacts (recommended)
+ description: |
+ Removes all contacts of an advisor matching the advisor's Symphony user ID.
+ operationId: deleteAdvisorContactsv2
+ parameters:
+ - name: advisorSymphonyId
+ in: path
+ description: Advisor's Symphony user ID
+ required: true
+ schema:
+ type: string
+ format: number
+ example: 1234567890
+ responses:
+ "200":
+ description: Call completed - Report provided with the list of SUCCESSFUL and FAILED operations
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/customer-deleteAdvisorContacts-responsev2"
+ "404":
+ description: Advisor or contact not found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_404_1"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "403":
+ description: Operation forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_403_0"
+ security:
+ - sfsAuthentication: []
+ "/api/v1/customer/contacts/advisorEmailAddress/{advisorEmailAddress}":
+ delete:
+ deprecated: true
+ tags:
+ - Contact
+ summary: Removes all contacts of a given advisor (deprecated)
+ description: |
+ Removes all the contacts of an advisor matching the advisor's email address.
+ operationId: deleteAdvisorContacts
+ parameters:
+ - name: advisorEmailAddress
+ in: path
+ description: Advisor's email address
+ required: true
+ schema:
+ type: string
+ example: william.smith@symphony.com
+ responses:
+ "200":
+ description: Call completed - Report provided with the list of SUCCESSFUL and FAILED operations
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/deleteContacts-response"
+ "404":
+ description: Advisor or contact not found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_404_1"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "403":
+ description: Operation forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_403_0"
+ security:
+ - sfsAuthentication: []
+
+
+ /api/v1/customer/permissions:
+ get:
+ tags:
+ - Permissions
+ summary: List permissions
+ description: |
+ List of available permissions for the external network at "CONNECT-DOMAIN"
+ operationId: listPermissions
+ responses:
+ "200":
+ description: List of permissions found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/permissions-response"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "403":
+ description: Operation forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_403_0"
+ security:
+ - sfsAuthentication: []
+ /api/v1/customer/externalNetwork/{externalNetwork}/permissions:
+ get:
+ tags:
+ - Permissions
+ summary: List EMP Permissions
+ operationId: listEmpPermissions
+ description: |
+ List all permissions available for the external network at "CONNECT-DOMAIN"
+ For each permission, returns id, name and whether they are set by default or not
+ parameters:
+ - name: externalNetwork
+ in: path
+ description: The external network.
+ required: true
+ schema:
+ type: string
+ example: "WHATSAPP"
+ responses:
+ "200":
+ description: List of EMP permissions found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/enhanced-permissions-response"
+ security:
+ - sfsAuthentication: [ ]
+ "/api/v2/customer/advisors/{advisorSymphonyId}/externalNetwork/{externalNetwork}/permissions":
+ get:
+ tags:
+ - Permissions
+ summary: List advisor's permissions (recommended)
+ description: |
+ List the permissions granted to an advisor on an external network.
+ operationId: listAdvisorPermissionsBySymphonyId
+ parameters:
+ - name: advisorSymphonyId
+ in: path
+ description: Advisor's Symphony user ID
+ required: true
+ schema:
+ type: string
+ example: 1234567890
+ - name: externalNetwork
+ in: path
+ description: "The external network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
+ required: true
+ schema:
+ type: string
+ example: WHATSAPP
+ responses:
+ "200":
+ description: List of advisor's permissions
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/advisor-permissions-response"
+ "404":
+ description: Advisor not found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/advisor-not-found"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "403":
+ description: Operation forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_403_0"
+ security:
+ - sfsAuthentication: []
+ post:
+ tags:
+ - Permissions
+ summary: Add permission to an advisor (recommended)
+ description: |
+ Grant permission to an advisor. \
+ Refer to the Permissions table on the Authentication page for the default permissions. \
+ For multi-company contacts, the contacts must be from the same network, e.g. all from WeChat or all from WhatsApp. Cross-network rooms are not authorized.
+ operationId: addPermissionBySymphonyId
+ parameters:
+ - name: advisorSymphonyId
+ in: path
+ description: Advisor's Symphony user ID
+ required: true
+ schema:
+ type: string
+ example: 1234567890
+ - name: externalNetwork
+ in: path
+ description: The external network
+ required: true
+ schema:
+ type: string
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/advisor-permission-request"
+ responses:
+ "200":
+ description: Permission successfully added to the advisor
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/advisor-permission-response"
+ "404":
+ description: Not found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_404_2"
+ "409":
+ description: Conflict
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/permission-already-assigned"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "403":
+ description: Operation forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_403_0"
+ security:
+ - sfsAuthentication: []
+ "/api/v1/customer/advisors/advisorEmailAddress/{advisorEmailAddress}/externalNetwork/{externalNetwork}/permissions":
+ get:
+ deprecated: true
+ tags:
+ - Permissions
+ summary: List advisor's permissions (deprecated)
+ description: |
+ List an advisor's permissions.
+ operationId: listAdvisorPermissionsByEmail
+ parameters:
+ - name: advisorEmailAddress
+ in: path
+ description: Advisor's email address
+ required: true
+ schema:
+ type: string
+ example: william.smith@symphony.com
+ - name: externalNetwork
+ in: path
+ description: "The external network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
+ required: true
+ schema:
+ type: string
+ example: WHATSAPP
+ responses:
+ "200":
+ description: List of advisor's permissions
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/advisor-permissions-response"
+ "404":
+ description: Advisor not found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/advisor-not-found"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "403":
+ description: Operation forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_403_0"
+ security:
+ - sfsAuthentication: []
+ post:
+ deprecated: true
+ tags:
+ - Permissions
+ summary: Add permission to an advisor (deprecated)
+ description: |
+ Grant permission to an advisor. \
+ Refer to the Permissions table on the Authentication page for the default permissions. \
+ For multi-company contacts, the contacts must be from the same network, e.g. all from WeChat or all from WhatsApp. Cross-network rooms are not authorized.
+ operationId: addPermissionByEmail
+ parameters:
+ - name: advisorEmailAddress
+ in: path
+ description: Advisor's email address
+ required: true
+ schema:
+ type: string
+ - name: externalNetwork
+ in: path
+ description: The external network
+ required: true
+ schema:
+ type: string
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/advisor-permission-request"
+ responses:
+ "200":
+ description: Permission successfully added to the advisor
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/advisor-permission-response"
+ "404":
+ description: Not found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_404_2"
+ "409":
+ description: Conflict
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/permission-already-assigned"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "403":
+ description: Operation forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_403_0"
+ security:
+ - sfsAuthentication: []
+
+ "/api/v2/customer/advisors/{advisorSymphonyId}/externalNetwork/{externalNetwork}/permissions/{permissionName}":
+ delete:
+ tags:
+ - Permissions
+ summary: Remove permission (recommended)
+ description: Remove a permission from an advisor.
+ operationId: removePermissionBySymphonyIdv2
+ parameters:
+ - name: advisorSymphonyId
+ in: path
+ description: Advisor's Symphony user ID
+ required: true
+ schema:
+ type: string
+ - name: externalNetwork
+ in: path
+ description: The external network
+ required: true
+ schema:
+ type: string
+ - name: permissionName
+ in: path
+ description: permissionName to remove
+ required: true
+ schema:
+ type: string
+ responses:
+ "204":
+ description: Permission successfully removed
+ "404":
+ description: Advisor not found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_404_3"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "403":
+ description: Operation forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_403_0"
+ security:
+ - sfsAuthentication: []
+ "/api/v1/customer/advisors/advisorEmailAddress/{advisorEmailAddress}/externalNetwork/{externalNetwork}/permissions/{permissionName}":
+ delete:
+ deprecated: true
+ tags:
+ - Permissions
+ summary: Remove permission from an advisor (deprecated)
+ description: Remove a permission from an advisor.
+ operationId: removePermissionByEmail
+ parameters:
+ - name: advisorEmailAddress
+ in: path
+ description: Advisor's email address
+ required: true
+ schema:
+ type: string
+ - name: externalNetwork
+ in: path
+ description: The external network
+ required: true
+ schema:
+ type: string
+ - name: permissionName
+ in: path
+ description: permissionName to remove
+ required: true
+ schema:
+ type: string
+ responses:
+ "200":
+ description: Permission removed successfully
+ "404":
+ description: Advisor not found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_404_3"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "403":
+ description: Operation forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_403_0"
+ security:
+ - sfsAuthentication: []
+
+ /api/v2/customer/advisors/permissions:
+ post:
+ tags:
+ - Permissions
+ summary: Add a permission to multiple advisors (recommended)
+ description: "Grant permission to multiple advisors."
+ operationId: addPermissionToMultipleAdvisor
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/advisors-permission-requestv2"
+ responses:
+ "200":
+ description: Permission successfully added to the advisor
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/multiple-advisor-permission-response"
+ "404":
+ description: Not found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_404_2"
+ "409":
+ description: Conflict
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/permission-already-assigned"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "403":
+ description: Operation forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_403_0"
+ security:
+ - sfsAuthentication: []
+ /api/v1/customer/advisors/permissions:
+ post:
+ deprecated: true
+ tags:
+ - Permissions
+ summary: Add permission to multiple advisors (deprecated)
+ description: "Add a permission to multiple advisors."
+ operationId: addPermissionToMultipleAdvisorByEmail
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/advisors-permission-request"
+ responses:
+ "200":
+ description: Permission successfully added to the advisor
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/multiple-advisor-permission-response"
+ "404":
+ description: Not found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_404_2"
+ "409":
+ description: Conflict
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/permission-already-assigned"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "403":
+ description: Operation forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_403_0"
+ security:
+ - sfsAuthentication: []
+
+ # delete:
+ # tags:
+ # - Permissions
+ # summary: Remove permission from multiple advisors
+ # description: |
+ # => Remove a permission from multiple advisors. **This endpoint will return an error 400**
+ # operationId: removePermissionFromMultipleAdvisorByEmail
+ # requestBody:
+ # content:
+ # application/json:
+ # schema:
+ # $ref: '#/components/schemas/advisor-permission-request'
+ # responses:
+ # '200':
+ # description: Request has been processed
+ # content:
+ # application/json:
+ # schema:
+ # $ref: '#/components/schemas/multiple-advisor-permission-response'
+ # '400':
+ # description: Request was not well formed
+ # content:
+ # application/json:
+ # schema:
+ # $ref: '#/components/schemas/inline_response_400'
+ # '401':
+ # description: Unauthorized
+ # content:
+ # application/json:
+ # schema:
+ # $ref: '#/components/schemas/inline_response_401'
+ # '403':
+ # description: Operation forbidden
+ # content:
+ # application/json:
+ # schema:
+ # $ref: '#/components/schemas/inline_response_403_0'
+ # security:
+ # - sfsAuthentication: []
+ # '/api/v1/customer/advisors/advisorEmailAddress/{advisorEmailAddress}/permissions':
+ # post:
+ # tags:
+ # - Permissions
+ # summary: Add permission to an advisor for all external networks
+ # description: => Add a permission to an advisor for all external networks.
+ # operationId: addPermissionForAllEnsByEmail
+ # parameters:
+ # - name: advisorEmailAddress
+ # in: path
+ # description: Advisor's email address
+ # required: true
+ # schema:
+ # type: string
+ # example: william.smith@symphony.com
+ # requestBody:
+ # content:
+ # application/json:
+ # schema:
+ # $ref: '#/components/schemas/advisor-permission-request'
+ # responses:
+ # '200':
+ # description: Operation completed
+ # content:
+ # application/json:
+ # schema:
+ # $ref: '#/components/schemas/bulk-advisor-permission-response'
+ # '404':
+ # description: Not found
+ # content:
+ # application/json:
+ # schema:
+ # $ref: '#/components/schemas/inline_response_404_2'
+ # '401':
+ # description: Unauthorized
+ # content:
+ # application/json:
+ # schema:
+ # $ref: '#/components/schemas/inline_response_401'
+ # '403':
+ # description: Operation forbidden
+ # content:
+ # application/json:
+ # schema:
+ # $ref: '#/components/schemas/inline_response_403_0'
+ # security:
+ # - sfsAuthentication: []
+ /api/v2/customer/contacts:
+ post:
+ tags:
+ - Contact
+ summary: Add a contact and/or advisors to a contact (recommended)
+ description: |
+ Add a contact and/or advisor(s) to the contact.
+ This end point can be called in 2 situations:
+
+ - To create a contact and eventually immediately associate one or more advisors.
+ - To add more advisors to an existing contact.
+
+ In both cases, you must provide all the contact's mandatory fields listed as "body params".
+
+ **Note**
+
+
+ - If both advisorSymphonyId and advisorEmailAddresses are passed, the advisorSymphonyId will prevail.
+
+ operationId: addContact
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/customer-contact-request"
+ responses:
+ "200":
+ description: Contact added successfully
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/add-contact-response"
+ "400":
+ description: Missing or malformed input
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_400_1"
+ "403":
+ description: Onboard user forbidden
+ content:
+ application/json:
+ schema:
+ oneOf:
+ - $ref: "#/components/schemas/inline_response_403"
+ - $ref: "#/components/schemas/inline_response_403_0"
+ - $ref: '#/components/schemas/user-id-mismatch'
+ - $ref: '#/components/schemas/phone-international-onboarding-forbidden'
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "404":
+ description: Not found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/tenant-configuration-not-found"
+ "409":
+ description: Conflict
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_409"
+ "500":
+ description: User creation failed
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/create-account-failed"
+ security:
+ - sfsAuthentication: []
+ get:
+ tags:
+ - Search
+ summary: List contacts (recommended)
+ description: |
+ List contacts, can query by emailAddress, phoneNumber or by contactSymphonyId or by advisorSymphonyId.
+ If the advisor has the admin:list-customers permission, they will be able to retrieve all pod contacts for a given externalNetwork, or to see other advisor's list of contacts.
+ operationId: listContacts2
+ parameters:
+ - name: externalNetwork
+ in: query
+ description: "The external network: WHATSAPP, SMS, WECHAT, SMS-DIRECT, LINE or WHATSAPP-DIRECT"
+ required: true
+ schema:
+ minLength: 1
+ type: string
+ example: WHATSAPP
+ - name: emailAddress
+ in: query
+ description: Contact's email address
+ required: false
+ schema:
+ type: string
+ format: email
+ example: johndoe@symphony.com
+ - name: phoneNumber
+ in: query
+ description: Contact's phone number
+ required: false
+ schema:
+ type: string
+ format: phone
+ example: +33 1 23 45 67 89
+ - name: symphonyId
+ in: query
+ description: Contact's Symphony user ID
+ required: false
+ schema:
+ type: string
+ pattern: '^\d+$'
+ example: 1234567890
+ - name: advisorSymphonyId
+ in: query
+ description: The advisor's Symphony ID
+ required: false
+ schema:
+ type: string
+ pattern: '^\d+$'
+ example: 1234567890
+ - name: phoneBlocked
+ in: query
+ description: Filter only available or blocked contact's phones
+ required: false
+ schema:
+ type: string
+ enum:
+ - "all"
+ - "false"
+ - "true"
+ default: all
+ - name: before
+ in: query
+ description: The before cursor for pagination
+ required: false
+ schema:
+ type: string
+ - name: after
+ in: query
+ description: The after cursor for pagination
+ required: false
+ schema:
+ type: string
+ responses:
+ "200":
+ description: Contact found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/list-contact-response"
+ "404":
+ description: Contact or tenant not found
+ content:
+ application/json:
+ schema:
+ oneOf:
+ - $ref: '#/components/schemas/contact-not-found'
+ - $ref: '#/components/schemas/tenant-not-found'
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "403":
+ description: Operation forbidden
+ content:
+ application/json:
+ schema:
+ oneOf:
+ - $ref: "#/components/schemas/inline_response_403_0"
+ - $ref: '#/components/schemas/user-id-mismatch'
+ security:
+ - sfsAuthentication: []
+
+ /api/v1/customer/contacts:
+ get:
+ deprecated: true
+ tags:
+ - Search
+ summary: Find a contact (deprecated)
+ description: |
+ Find a contact searching by email address and external network
+ operationId: findContacts
+ parameters:
+ - name: externalNetwork
+ in: query
+ description: "The external network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
+ required: true
+ schema:
+ minLength: 1
+ type: string
+ example: WHATSAPP
+ - name: emailAddress
+ in: query
+ description: Contact's email address
+ required: true
+ schema:
+ type: string
+ format: email
+ example: johndoe@symphony.com
+ responses:
+ "200":
+ description: Contact found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/find-contact-response"
+ "404":
+ description: Contact not found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/contact-not-found"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "403":
+ description: Operation forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_403_0"
+ security:
+ - sfsAuthentication: []
+ "/api/v1/customer/contacts/{contactEmailAddress}/update":
+ post:
+ deprecated: true
+ tags:
+ - Contact
+ summary: Update Contact (deprecated)
+ description: |
+ Update the first name, last name, company name (maximum 100 characters long) of a contact for a given external network.
+
Updating the contact's email address or phone number is not supported.
+ # to be validated
the "advisorEmailAddress" is the email address of the advisor that first onboarded the contact.
+ operationId: updateContacts
+ parameters:
+ - name: contactEmailAddress
+ in: path
+ description: Contact's email address
+ required: true
+ schema:
+ type: string
+ example: johndoe@symphony.com
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/customer-update-contacts-request"
+ responses:
+ "200":
+ description: Contact successfully updated
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/update-contacts-response"
+ "400":
+ description: Missing or malformed input
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/external-network-not-found"
+ "403":
+ description: Update user forbidden
+ content:
+ application/json:
+ schema:
+ oneOf:
+ - $ref: "#/components/schemas/inline_response_403_1"
+ - $ref: "#/components/schemas/inline_response_403_0"
+ - $ref: "#/components/schemas/cannot-edit-advisor-own-contact-email"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "404":
+ description: Contact not found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_404_4"
+ "500":
+ description: Contact update failed
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/update-account-failed"
+ security:
+ - sfsAuthentication: []
+ /api/v1/customer/advisors:
+ get:
+ deprecated: true
+ tags:
+ - Search
+ summary: Search for an advisor (deprecated)
+ description: |
+ Search for an advisor by email address or Symphony user ID and external network.
+ operationId: findAdvisor
+ parameters:
+ - name: externalNetwork
+ in: query
+ description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
+ required: true
+ schema:
+ minLength: 1
+ type: string
+ example: WHATSAPP
+ - name: advisorEmailAddress
+ in: query
+ description: Advisor's email address
+ required: false
+ schema:
+ type: string
+ format: email
+ example: william.smith@symphony.com
+ - name: advisorSymphonyId
+ in: query
+ description: Advisor's Symphony user ID
+ required: false
+ schema:
+ type: string
+ format: email
+ example: 1234567890
+ responses:
+ "200":
+ description: Advisor found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/entitlement-response"
+ "404":
+ description: Advisor not found (Advisor may not be entitled for this external network)
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_404_5"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "403":
+ description: Operation forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_403_0"
+ security:
+ - sfsAuthentication: []
+
+ "/api/v2/customer/contact":
+ get:
+ tags:
+ - Search
+ summary: Get contact
+ description: |
+ Get a contact searching by their phone number, their external network and, optionally, their advisor's federation group.
+ operationId: getContact
+ parameters:
+ - in: query
+ name: phoneNumber
+ description: contact's phone number
+ schema:
+ type: string
+ format: phone
+ required: true
+ - in: query
+ name: externalNetwork
+ description: contact's external network
+ schema:
+ type: string
+ required: true
+ - in: query
+ name: federationGroupId
+ description: contact's federationGroupId
+ schema:
+ type: string
+ responses:
+ '200':
+ description: Contact found
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/find-contact-response-v2'
+ '400':
+ description: Bad Request
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/external-network-not-found'
+ '404':
+ description: Not found
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/inline_response_404_6'
+ security:
+ - sfsAuthentication: []
+
+ "/api/v2/customer/contacts/{contactSymphonyId}/advisors":
+ get:
+ tags:
+ - Search
+ summary: List a contact’s advisors (recommended)
+ description: |
+ Search for the advisors of a provided contact email address for a given external network.
+ operationId: findAdvisorsv2
+ parameters:
+ - name: contactSymphonyId
+ in: path
+ description: The Contact's Symphony user ID
+ required: true
+ schema:
+ type: string
+ format: number
+ example: 1234567890
+ - in: query
+ name: before
+ schema:
+ type: string
+ description: The before cursor for pagination
+ - in: query
+ name: after
+ schema:
+ type: string
+ description: The after cursor for pagination
+ responses:
+ "200":
+ description: List of advisor(s) found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/advisors-search-response"
+ "404":
+ description: Contact not found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_404_6"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "403":
+ description: Operation forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_403_0"
+ security:
+ - sfsAuthentication: []
+
+ "/api/v1/customer/contacts/externalNetwork/{externalNetwork}/search":
+ get:
+ tags:
+ - CustomerContact
+ summary: Search contacts
+ operationId: searchContacts
+ description: >
+ => Search an advisor's contacts related to a given externalNetwork
+ security:
+ - sfsAuthentication: [ ]
+ parameters:
+ - in: path
+ name: externalNetwork
+ schema:
+ type: string
+ required: true
+ example: WHATSAPP
+ - in: query
+ name: query
+ required: true
+ schema:
+ type: string
+ description: Start search by first name, then last name and then display name
+ example: o
+ responses:
+ "200":
+ description: List of contacts found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/search-contacts-response"
+
+ "/api/v1/customer/contacts/contactEmailAddress/{contactEmailAddress}/externalNetwork/{externalNetwork}/advisors":
+ get:
+ deprecated: true
+ tags:
+ - Search
+ summary: Search the advisors of a contact (deprecated)
+ description: |
+ Search for the advisors of a provided contact email address for a given external network.
+ operationId: findAdvisors
+ parameters:
+ - name: externalNetwork
+ in: path
+ description: "The external network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
+ required: true
+ schema:
+ minLength: 1
+ type: string
+ example: WHATSAPP
+ - name: contactEmailAddress
+ in: path
+ description: Contact's email address
+ required: true
+ schema:
+ type: string
+ format: email
+ example: johndoe@symphony.com
+ responses:
+ "200":
+ description: List of advisor(s) found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/advisors-search-response"
+ "404":
+ description: Contact not found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_404_6"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "403":
+ description: Operation forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_403_0"
+ security:
+ - sfsAuthentication: []
+
+ "/api/v1/customer/advisors/{advisorSymphonyId}/externalNetwork/{externalNetwork}/contacts":
+ get:
+ tags:
+ - Search
+ summary: List an advisor's contacts (recommended)
+ description: |
+ Search for the contacts associated with the provided advisor’s Symphony user ID for a given external network.
+ operationId: findContactsOfAdvisorv2
+ parameters:
+ - name: externalNetwork
+ in: path
+ description: "The external network: WHATSAPP, SMS, WECHAT, SMS-DIRECT, LINE or WHATSAPP-DIRECT"
+ required: true
+ schema:
+ minLength: 1
+ type: string
+ example: WHATSAPP
+ - name: advisorSymphonyId
+ in: path
+ description: Advisor's Symphony user ID
+ required: true
+ schema:
+ type: string
+ format: number
+ example: 1234567890
+ - in: query
+ name: before
+ schema:
+ type: string
+ description: The before cursor for pagination
+ - in: query
+ name: after
+ schema:
+ type: string
+ description: The after cursor for pagination
+ responses:
+ "200":
+ description: List of contacts(s) found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/contacts-response"
+ "404":
+ description: Advisor not found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_404_5"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "403":
+ description: Operation forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_403_0"
+ security:
+ - sfsAuthentication: []
+ "/api/v1/customer/advisors/advisorEmailAddress/{advisorEmailAddress}/externalNetwork/{externalNetwork}/contacts":
+ get:
+ deprecated: true
+ tags:
+ - Search
+ summary: Search an advisor's contacts (deprecated)
+ description: |
+ Search for contacts associated with the advisor whose email address is provided for a given external network.
+ operationId: findContactsOfAdvisor
+ parameters:
+ - name: externalNetwork
+ in: path
+ description: "The external network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
+ required: true
+ schema:
+ minLength: 1
+ type: string
+ example: WHATSAPP
+ - name: advisorEmailAddress
+ in: path
+ description: Advisor's email address
+ required: true
+ schema:
+ type: string
+ format: email
+ example: william.smith@symphony.com
+ responses:
+ "200":
+ description: List of contacts(s) found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/contacts-response"
+ "404":
+ description: Advisor not found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_404_5"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "403":
+ description: Operation forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_403_0"
+ security:
+ - sfsAuthentication: []
+
+ /api/v2/customer/rooms:
+ get:
+ tags:
+ - Room
+ summary: List an advisor's rooms (recommended)
+ description: |
+ List all rooms where an advisor is either a member or an owner for a given network.
+ Search is performed with the advisor's Symphony user ID.
+ This end point returns at most 25 records per page.
+ operationId: listRoomsv2
+ parameters:
+ - name: advisorSymphonyId
+ in: query
+ description: Advisor's Symphony user ID
+ required: true
+ schema:
+ type: string
+ format: number
+ example: 1234567890
+ - name: externalNetwork
+ in: query
+ description: "The external network: WECHAT or WHATSAPP or WHATSAPP-DIRECT or SMS or SMS-DIRECT or LINE"
+ required: true
+ schema:
+ type: string
+ example: WHATSAPP
+ - name: owner
+ in: query
+ description:
+ If set to "true", lists the rooms where the advisor is an owner.
+ If set to "false", lists the rooms where the advisor is an owner and the rooms where the advisor is only a member.
+ schema:
+ type: boolean
+ default: true
+ - name: before
+ in: query
+ description: The before cursor for pagination
+ schema:
+ type: string
+ - name: after
+ in: query
+ description: The after cursor for pagination
+ schema:
+ type: string
+ responses:
+ "200":
+ description: List of rooms found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/rooms-response"
+ "400":
+ description: Missing or malformed parameter
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/invalid-page-cursor"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "403":
+ description: Operation forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_403_0"
+ '404':
+ description: Not found
+ content:
+ application/json:
+ schema:
+ oneOf:
+ - $ref: '#/components/schemas/tenant-configuration-not-found'
+ - $ref: '#/components/schemas/advisor-not-found'
+ security:
+ - sfsAuthentication: []
+ post:
+ tags:
+ - Room
+ summary: Create room (recommended)
+ description: |
+ Create a room with the advisor whose Symphony user ID is provided.
+ The advisor is set as a member.
+ "externalNetworkRoomDisplayName" applies for WeChat only.
+ operationId: createRoomv2
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/room-requestv2"
+ responses:
+ "200":
+ description: Room created successfully
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/room-creation-response-v2"
+ "400":
+ description: Bad request
+ content:
+ application/json:
+ schema:
+ oneOf:
+ - $ref: "#/components/schemas/inline_response_400_2"
+ - $ref: "#/components/schemas/incompatible-external-network-and-request-body"
+ "403":
+ description: Forbidden
+ content:
+ application/json:
+ schema:
+ oneOf:
+ - $ref: "#/components/schemas/inline_response_403_2"
+ - $ref: "#/components/schemas/inline_response_403_0"
+ - $ref: "#/components/schemas/federation-group-emp-forbidden"
+ - $ref: '#/components/schemas/user-id-mismatch'
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "404":
+ description: Advisor not found
+ content:
+ application/json:
+ schema:
+ oneOf:
+ - $ref: "#/components/schemas/inline_response_404_7"
+ - $ref: "#/components/schemas/federation-group-not-found"
+ "409":
+ description: Conflict (room name already exists)
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/room-already-exists"
+ "500":
+ description: Room creation failed
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_500"
+ security:
+ - sfsAuthentication: []
+ /api/v1/customer/rooms:
+ get:
+ deprecated: true
+ tags:
+ - Room
+ summary: List an advisor's rooms (deprecated)
+ description: |
+ List all rooms where an advisor is either a member or an owner for a given network.
+ The search is performed with the advisor's email address.
+ This end point returns at most 25 records per page.
+ operationId: listRooms
+ parameters:
+ - name: advisorEmailAddress
+ in: query
+ description: Advisor's email address
+ required: true
+ schema:
+ type: string
+ format: email
+ example: william.smith@symphony.com
+ - name: externalNetwork
+ in: query
+ description: "The external network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
+ required: true
+ schema:
+ type: string
+ example: WHATSAPP
+ - name: owner
+ in: query
+ description:
+ If set to "true", list the rooms where the advisor is an owner.
+ If set to "false", list the rooms where the advisor is only a member.
+ schema:
+ type: boolean
+ default: true
+ - name: before
+ in: query
+ description: The before cursor for pagination
+ schema:
+ type: string
+ - name: after
+ in: query
+ description: The after cursor for pagination
+ schema:
+ type: string
+ responses:
+ "200":
+ description: List of rooms found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/rooms-response"
+ "400":
+ description: Missing or malformed parameter
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/invalid-page-cursor"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "403":
+ description: Operation forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_403_0"
+ security:
+ - sfsAuthentication: []
+ post:
+ deprecated: true
+ tags:
+ - Room
+ summary: Create room (deprecated)
+ description: |
+ Create a room with the advisor whose email address is provided.
+ The advisor is set as a member.
+ operationId: createRoom
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/room-request"
+ responses:
+ "200":
+ description: Room created successfully
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/room-creation-response"
+ "400":
+ description: Bad request
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_400_2"
+ "403":
+ description: Forbidden
+ content:
+ application/json:
+ schema:
+ oneOf:
+ - $ref: "#/components/schemas/inline_response_403_2"
+ - $ref: "#/components/schemas/inline_response_403_0"
+ - $ref: "#/components/schemas/federation-group-emp-forbidden"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "404":
+ description: Not found
+ content:
+ application/json:
+ schema:
+ oneOf:
+ - $ref: "#/components/schemas/inline_response_404_7"
+ - $ref: "#/components/schemas/federation-group-not-found"
+ "409":
+ description: Conflict (room name already exists)
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/room-already-exists"
+ "500":
+ description: Room creation failed
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_500"
+ security:
+ - sfsAuthentication: []
+
+ /api/v1/customer/rooms/{streamId}/rename:
+ post:
+ tags:
+ - Room
+ summary: Rename a room
+ operationId: renameRoom
+ description: |
+ Rename a room with the new room name which is provided.
+ security:
+ - sfsAuthentication: [ ]
+ parameters:
+ - in: path
+ name: streamId
+ schema:
+ type: string
+ required: true
+ description: StreamId of the room to rename.
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/rename-room-request'
+ responses:
+ '200':
+ description: Room name updated successfully
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/rename-room-response'
+ '401':
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/inline_response_401'
+ '403':
+ description: Forbidden
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/rename-room-forbidden'
+ '404':
+ description: Room not found
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/room-not-found'
+ '409':
+ description: Conflict
+ content:
+ application/json:
+ schema:
+ oneOf:
+ - $ref: '#/components/schemas/room-already-exists'
+ - $ref: '#/components/schemas/different-room-name-required'
+ - $ref: '#/components/schemas/cannot-rename-room-duplicate-room-name'
+ - $ref: '#/components/schemas/room-is-deactivated'
+ '500':
+ description: Rename room failed
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/rename-room-failed'
+
+ "/api/v1/customer/rooms/{streamId}/ownership":
+ post:
+ tags:
+ - Room
+ summary: Transfer room ownership to another advisor
+ operationId: transferRoomOwnership
+ description: |
+ Transfer the room ownership to the advisor matching the provided Symphony user ID.
+ This advisor should already be a member of the room.
+ security:
+ - sfsAuthentication: [ ]
+ parameters:
+ - in: path
+ name: streamId
+ schema:
+ type: string
+ required: true
+ description: StreamId of the room to transfer.
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/transfer-room-ownership-request'
+ responses:
+ '204':
+ description: Room owner updated successfully
+ '404':
+ description: Not found
+ content:
+ application/json:
+ schema:
+ oneOf:
+ - $ref: '#/components/schemas/tenant-configuration-not-found'
+ - $ref: '#/components/schemas/advisor-not-found'
+ - $ref: '#/components/schemas/room-not-found'
+ '409':
+ description: Conflict
+ content:
+ application/json:
+ schema:
+ oneOf:
+ - $ref: '#/components/schemas/already-room-owner'
+ - $ref: '#/components/schemas/not-a-room-member'
+ - $ref: '#/components/schemas/room-is-deactivated'
+ - $ref: '#/components/schemas/cannot-transfer-room-ownership-duplicate-room-name'
+
+ "/api/v2/customer/rooms/{streamId}/members":
+ delete:
+ tags:
+ - Room
+ summary: Remove room member (recommended)
+ description:
+ Remove any member, advisor or contact from a room.
+ The room is identified by its streamID.
+ operationId: removeRoomMemberv2
+ parameters:
+ - name: streamId
+ in: path
+ description: |
+ Room's streamId.
+ The streamId needs to be URLsafe Base64.
+ To obtain the URLSafe Base64 Conversation ID:
+ - replace forward slashes / with underscores
+ - replace pluses + with minuses -
+ - ignore any trailing equal signs =
+ For example, the URLSafe Base64 encoding of: lX1hwfmQ+AK/k/a/BB0y2n///q2+0KfbdA== converts to lX1hwfmQ-AK_k_a_BB0y2n___q2-0KfbdA.
+ required: true
+ schema:
+ type: string
+ example: bjHSiY4iz3ar4iIh6-VzCX___peoM7cPdA
+ - name: memberSymphonyId
+ in: query
+ description: The Symphony user ID of the member to remove
+ required: true
+ schema:
+ type: string
+ format: number
+ example: 1234567890
+ - name: advisorSymphonyId
+ in: query
+ description: The Symphony user ID of the advisor who is removing the member
+ required: true
+ schema:
+ type: number
+ example: 1234567890
+ responses:
+ "200":
+ description: Member successfully removed from the room
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/remove-room-members-response"
+ "403":
+ description: Forbidden
+ content:
+ application/json:
+ schema:
+ oneOf:
+ - $ref: "#/components/schemas/inline_response_403_3"
+ - $ref: "#/components/schemas/inline_response_403_0"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "404":
+ description: Not found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_404_8"
+ "409":
+ description: Conflict
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_409_1"
+ security:
+ - sfsAuthentication: []
+ post:
+ tags:
+ - Room
+ summary: Add room member (recommended)
+ description: |
+ Add a member to a room:
+
+ - An advisor must be entitled for the relevant external network.
+ - A contact must have already been onboarded.
+
+ operationId: addRoomMemberMultiRoomv2
+ parameters:
+ - name: streamId
+ in: path
+ description: |
+ Room's streamId.
+ The streamID needs to be URLsafe Base64.
+ To obtain the URLSafe Base64 conversation ID:
+ - Replace forward slashes / with underscores _
+ - Replace pluses + with minuses -
+ - Ignore any trailing equal signs =
+ For example, the URLSafe Base64 encoding of: lX1hwfmQ+AK/k/a/BB0y2n///q2+0KfbdA== converts to lX1hwfmQ-AK_k_a_BB0y2n___q2-0KfbdA.
+ required: true
+ schema:
+ type: string
+ example: bjHSiY4iz3ar4iIh6-VzCX___peoM7cPdA
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/room-member-requestv2"
+ responses:
+ "200":
+ description: Member successfully added to the room
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/room-member-response"
+ "400":
+ description: Forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_400_3"
+ "403":
+ description: Forbidden
+ content:
+ application/json:
+ schema:
+ oneOf:
+ - $ref: "#/components/schemas/inline_response_403_2"
+ - $ref: "#/components/schemas/inline_response_403_0"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "404":
+ description: Not found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_404_9"
+ "409":
+ description: Conflict
+ content:
+ application/json:
+ schema:
+ oneOf:
+ - $ref: "#/components/schemas/room-is-deactivated"
+ - $ref: "#/components/schemas/add-room-member-conflicted"
+ "500":
+ description: Failed to add member to the room
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/add-room-member-failed"
+ security:
+ - sfsAuthentication: []
+ /api/v1/customer/rooms/{streamId}/members:
+ get:
+ tags:
+ - Room
+ summary: List room members
+ description: |
+ List a room’s members. The room is identified by its streamID.
+ operationId: listRoomMembers
+ parameters:
+ - name: streamId
+ in: path
+ description: |
+ Room's streamId.
+ The streamId needs to be URL safe Base64.
+ To obtain the URLSafe Base64 conversation ID:
+ - Replace forward slashes / with underscores _
+ - Replace pluses + with minuses -
+ - Ignore any trailing equal signs =
+ For example, the URLSafe Base64 encoding of: lX1hwfmQ+AK/k/a/BB0y2n///q2+0KfbdA== converts to lX1hwfmQ-AK_k_a_BB0y2n___q2-0KfbdA.
+ required: true
+ schema:
+ type: string
+ example: lX1hwfmQ-AK_k_a_BB0y2n___q2-0KfbdA
+ - name: before
+ in: query
+ description: The before cursor for pagination
+ schema:
+ type: string
+ - name: after
+ in: query
+ description: The after cursor for pagination
+ schema:
+ type: string
+ responses:
+ "200":
+ description: List of room members
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/room-members-response"
+ "400":
+ description: Missing or malformed parameter
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/invalid-page-cursor"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "403":
+ description: Operation forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_403_0"
+ security:
+ - sfsAuthentication: []
+ delete:
+ deprecated: true
+ tags:
+ - Room
+ summary: Remove room member (deprecated)
+ description:
+ Remove a member from a room, be it an advisor or a contact.
+ The room is identified by its streamId.
+ operationId: removeRoomMember
+ parameters:
+ - name: streamId
+ in: path
+ description: |
+ Room's streamId.
+ The streamId needs to be URL safe Base64.
+ To obtain the URLSafe Base64 conversation ID:
+ - Replace forward slashes / with underscores _
+ - Replace pluses + with minuses -
+ - Ignore any trailing equal signs =
+ For example, the URLSafe Base64 encoding of: lX1hwfmQ+AK/k/a/BB0y2n///q2+0KfbdA== converts to lX1hwfmQ-AK_k_a_BB0y2n___q2-0KfbdA.
+
+ required: true
+ schema:
+ type: string
+ example: bjHSiY4iz3ar4iIh6-VzCX___peoM7cPdA
+ - name: memberEmailAddress
+ in: query
+ description: The email address of the member to remove
+ required: true
+ schema:
+ type: string
+ format: email
+ example: johndoe@symphony.com
+ - name: externalNetwork
+ in: query
+ description: "The external network of the member to remove: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
+ required: true
+ schema:
+ type: string
+ example: WHATSAPP
+ - name: advisorEmailAddress
+ in: query
+ description: The email address of the advisor who is removing the member
+ required: true
+ schema:
+ type: string
+ example: william.smith@symphony.com
+ - name: contact
+ in: query
+ description: If set to "true", the member to remove is a contact.
+ If set to "false", the member to remove is an advisor.
+ required: true
+ schema:
+ type: boolean
+ responses:
+ "200":
+ description: Member successfully removed from the room
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/remove-room-members-response"
+ "403":
+ description: Forbidden
+ content:
+ application/json:
+ schema:
+ oneOf:
+ - $ref: "#/components/schemas/inline_response_403_3"
+ - $ref: "#/components/schemas/inline_response_403_0"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "404":
+ description: Not found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_404_8"
+ security:
+ - sfsAuthentication: []
+ /api/v1/customer/rooms/{streamId}/features:
+ post:
+ tags:
+ - Room
+ summary: Update a room's features
+ description: |
+ Update a room's features. Only supported for WhatsApp. The room is identified by its streamID.
+ operationId: updateRoomFeatures
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/room-features-request"
+ parameters:
+ - name: streamId
+ in: path
+ description: |
+ Room's streamId.
+ The streamId needs to be URLsafe Base64.
+ To obtain the URLSafe Base64 conversation ID:
+ - Replace forward slashes / with underscores _
+ - Replace pluses + with minuses -
+ - Ignore any trailing equal signs =
+ For example, the URLSafe Base64 encoding of: lX1hwfmQ+AK/k/a/BB0y2n///q2+0KfbdA== converts to lX1hwfmQ-AK_k_a_BB0y2n___q2-0KfbdA.
+ required: true
+ schema:
+ type: string
+ example: lX1hwfmQ-AK_k_a_BB0y2n___q2-0KfbdA
+ responses:
+ "204":
+ description: Features updated successfully
+ "400":
+ description: Missing or malformed parameter
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/invalid-page-cursor"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "403":
+ description: Operation forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_403_0"
+ security:
+ - sfsAuthentication: [ ]
+ /api/v1/customer/rooms/{streamId}/activity:
+ put:
+ tags:
+ - CustomerRoom
+ summary: Update room activity
+ operationId: updateRoomActivity
+ description: Update room activity room by stream ID
+ security:
+ - sfsAuthentication: [ ]
+ parameters:
+ - in: path
+ name: streamId
+ description: |
+ Room's streamId.
+ The streamID needs to be URLsafe Base64.
+ To obtain the URLSafe Base64 Conversation ID:
+
+ - Replace forward slashes / with underscores _
+ - Replace pluses + with minuses -
+ - Ignore any trailing equal signs =
+
+ For example, the URLSafe Base64 encoding of: lX1hwfmQ+AK/k/a/BB0y2n///q2+0KfbdA== converts to lX1hwfmQ-AK_k_a_BB0y2n___q2-0KfbdA.
+ schema:
+ type: string
+ required: true
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/room-set-activity-request'
+ responses:
+ '200':
+ description: Room Activity successfully updated
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/room-set-activity-response'
+ '404':
+ description: Room not found
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/room-not-found'
+ '500':
+ description: Update room Status failed
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/update-room-status-failed'
+ '501':
+ description: Reactivation Not Implemented
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/reactivate-room-not-implemented'
+
+ "/api/v1/customer/rooms/members":
+ post:
+ deprecated: true
+ tags:
+ - Room
+ summary: Add room member (deprecated)
+ description: |
+ Add a member to a room:
+
+ - An advisor must be entitled for the relevant external network.
+ - A contact must have already been onboarded.
+
+ operationId: addRoomMemberMultiRoom
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/room-member-request"
+ responses:
+ "200":
+ description: Member successfully added to the room
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/room-member-response"
+ "400":
+ description: Forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_400_3"
+ "403":
+ description: Forbidden
+ content:
+ application/json:
+ schema:
+ oneOf:
+ - $ref: "#/components/schemas/inline_response_403_2"
+ - $ref: "#/components/schemas/inline_response_403_0"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "404":
+ description: Not found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_404_9"
+ "409":
+ description: Conflict
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/member-already-in-room"
+ "500":
+ description: Failed to add member to the room
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/add-room-member-failed"
+ security:
+ - sfsAuthentication: []
+
+ /api/v2/customer/rooms/members:
+ post:
+ tags:
+ - Room
+ summary: Add room members in bulk (recommended)
+ description: |
+ Add multiple advisors and/or contacts to a room.
+ An advisor must be entitled for the relevant external network. A contact must have already been onboarded.
+ operationId: addRoomMembersMultiRoomv2
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/bulk-room-member-multi-room-requestv2"
+ responses:
+ "200":
+ description: Operation to add members to the room completed.
+ Returns an object with the detail of each member's addition success or failure.
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/bulk-room-member-responsev2"
+ "400":
+ description: Missing or malformed parameter
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/rfc-error"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "403":
+ description: Operation forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_403_0"
+ security:
+ - sfsAuthentication: []
+ /api/v1/customer/rooms/members/bulk:
+ post:
+ deprecated: true
+ tags:
+ - Room
+ summary: Add room members in bulk (deprecated)
+ description: |
+ Add multiple members to a room:
+
+ - Advisors must be entitled for the relevant external network.
+ - Contacts must have already been onboarded.
+
+ Returns a report indicating the success or failure for each element of the array.
+ operationId: addRoomMembersMultiRoom
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/bulk-room-member-multi-room-request"
+ responses:
+ "200":
+ description: Operation to add members to the room completed.
+ Returns an object with the detail of each member addition success or failure.
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/bulk-room-member-response"
+ "400":
+ description: Missing or malformed parameter
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/rfc-error"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "403":
+ description: Operation forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_403_0"
+ security:
+ - sfsAuthentication: []
+
+ /api/v1/customer/companies/search:
+ get:
+ tags:
+ - Companies
+ summary: Search for companies
+ description: |
+ Search for companies by name.
+ Note: The WeChat or WhatsApp or SMS or SMS Direct or LINE onboarding applications do not enforce consistency for company names.
+ security:
+ - sfsAuthentication: []
+ operationId: searchCompanies
+ parameters:
+ - name: query
+ in: query
+ description: Start of the company's name to match
+ required: true
+ schema:
+ minLength: 3
+ type: string
+ example: sym
+ responses:
+ "200":
+ description: List of found companies
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/companies-search-response"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_401"
+ "403":
+ description: Operation forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inline_response_403_0"
+
+ /api/v1/customer/federationGroups:
+ get:
+ tags:
+ - Federation Group (**NEW**)
+ summary: List all federation groups
+ description: |
+ List all federation groups
+ operationId: listTenantFederationGroups
+ parameters:
+ - in: query
+ name: before
+ schema:
+ type: string
+ description: The before cursor for pagination
+ - in: query
+ name: after
+ schema:
+ type: string
+ description: The after cursor for pagination
+ responses:
+ "200":
+ description: List of federation groups
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/list-federation-groups-response"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/Unauthorized"
+ "403":
+ description: Operation forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/Forbidden"
+ security:
+ - sfsAuthentication: []
+
+ /api/v1/customer/advisors/{advisorSymphonyId}/externalNetwork/{externalNetwork}/federationGroup:
+ put:
+ tags:
+ - Federation Group (**NEW**)
+ summary: Update advisor's federation group for the given external network.
+ description: |
+ Update advisor's federation group for the given external network.
+ operationId: updateAdvisorFederationGroup
+ parameters:
+ - name: externalNetwork
+ in: path
+ required: true
+ description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
+ schema:
+ type: string
+ example: WHATSAPP
+ - name: advisorSymphonyId
+ in: path
+ required: true
+ description: Advisor's Symphony user ID
+ schema:
+ type: string
+ example: 12345678912365
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/update-federation-group-request"
+ responses:
+ "204":
+ description: The advisor's federation group is updated successfully.
+ "400":
+ description: Missing or malformed input
+ content:
+ application/json:
+ schema:
+ oneOf:
+ - $ref: '#/components/schemas/missing-destination-federation-group'
+ - $ref: '#/components/schemas/multiple-destination-federation-group'
+ - $ref: '#/components/schemas/external-network-not-found'
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/Unauthorized"
+ "403":
+ description: Operation forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/federation-group-emp-forbidden"
+ "404":
+ description: Not found
+ content:
+ application/json:
+ schema:
+ oneOf:
+ - $ref: "#/components/schemas/federation-group-not-found"
+ - $ref: "#/components/schemas/advisor-not-found"
+
+ security:
+ - sfsAuthentication: []
+
+ /api/v1/customer/advisors/federationGroup/bulk:
+ post:
+ tags:
+ - Federation Group (**NEW**)
+ summary: Bulk update advisor's federation group
+ description: |
+ Bulk update advisor's federation group.
+ operationId: bulkUpdateAdvisorsFederationGroup
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/bulk-update-federation-group-request"
+ responses:
+ "200":
+ description: The advisor's federation group is updated successfully.
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/bulk-update-federation-group-response"
+ "400":
+ description: Missing or malformed input
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/external-network-not-found"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/Unauthorized"
+ "403":
+ description: Operation forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/Forbidden"
+ "404":
+ description: Not found
+ content:
+ application/json:
+ schema:
+ oneOf:
+ - $ref: '#/components/schemas/advisor-not-found'
+ - $ref: '#/components/schemas/federation-group-not-found'
+ security:
+ - sfsAuthentication: []
+
+ /api/v1/customer/rooms/{streamId}/federationGroup:
+ put:
+ tags:
+ - Federation Group (**NEW**)
+ summary: Set federation group of a room
+ operationId: updateRoomFederationGroups
+ description: Set the federation group of a room.
+ parameters:
+ - in: path
+ name: streamId
+ schema:
+ type: string
+ required: true
+ description: StreamId of the room to transfer
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/room-set-federation-group-request"
+ responses:
+ "204":
+ description: The room's federation group has been updated successfully.
+ "400":
+ description: Missing or malformed input
+ content:
+ application/json:
+ schema:
+ oneOf:
+ - $ref: '#/components/schemas/missing-destination-federation-group'
+ - $ref: '#/components/schemas/multiple-destination-federation-group'
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/Unauthorized"
+ "403":
+ description: Operation forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/federation-group-emp-forbidden"
+ "404":
+ description: Not found
+ content:
+ application/json:
+ schema:
+ oneOf:
+ - $ref: "#/components/schemas/room-not-found"
+ - $ref: "#/components/schemas/federation-group-not-found"
+ "409":
+ description: Conflict
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/room-update-federation-group-errors"
+ security:
+ - sfsAuthentication: []
+
+ /api/v1/customer/contacts/{contactSymphonyId}/advisor/{advisorSymphonyId}/resendInvite:
+ post:
+ tags:
+ - Customer invite
+ summary: Resend a new onboarding invitation to contact
+ operationId: resendInvite
+ description: >
+ Only applicable for networks requiring onboarding invitations: WeChat, LINE.
+ Sends a new onboarding invitation to the contact with the onboarding instructions and a new authentication one-time-password token, if applicable.
+ Required to reset the contact's invitation after it expires. The invitation expiry counter (7 days) is reset to zero and the status is changed from "Expired" to "Pending".
+ LINE since 23.04: If the user enters an expired one-time-password token within the first 7 days they were onboarded, they automatically receive a new valid token.
+ After the 7 days, calling this api is required to reset the user invitation status and to generate a new token.
+ security:
+ - sfsAuthentication: [ ]
+ parameters:
+ - in: path
+ name: contactSymphonyId
+ schema:
+ type: string
+ format: number
+ example: 1234567890
+ required: true
+ description: Contact's Symphony user ID
+ - in: path
+ name: advisorSymphonyId
+ schema:
+ type: string
+ format: number
+ example: 1234567890
+ required: true
+ description: Onboarder's Symphony user ID
+ responses:
+ '200':
+ description: The invite has been resent successfully.
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/resend-invite-response"
+ '400':
+ description: Missing or malformed input
+ content:
+ application/json:
+ schema:
+ oneOf:
+ - $ref: "#/components/schemas/invite-already-confirmed"
+ - $ref: "#/components/schemas/invites-not-configured-on-emp"
+ '404':
+ description: Not found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/contact-not-found"
+ '500':
+ description: Failed
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/resend-invite-failed'
+ /api/v1/customer/tenant/empChannelConnector/{externalNetwork}:
+ get:
+ tags:
+ - CustomerContact
+ summary: List EMP connectors available for one or multiple contacts
+ description: |
+ List the EMP connectors available for one or multiple contacts by Symphony IDs \
+ EMP connector corresponds to \
+ - Official accounts for LINE
+ - Business APIs for WhatsApp
+ - Phone numbers for SMS
+ operationId: listAvailableEmpChannelConnectors
+ parameters:
+ - name: externalNetwork
+ in: path
+ description: "The external network: LINE or WHATSAPP or SMS"
+ required: true
+ schema:
+ minLength: 1
+ type: string
+ example: WHATSAPP
+ - name: symphonyId
+ in: query
+ description: Contacts' Symphony IDs
+ required: false
+ schema:
+ type: array
+ items:
+ type: string
+ pattern: '^\d+$'
+ example: 13606456398824
+ - name: federationGroupId
+ in: query
+ description: Federation group ID
+ required: false
+ schema:
+ type: string
+ example: 83df14d1-9fdb-4cbb-9a9d-718e5e15266a
+ responses:
+ '200':
+ description: EMP connectors found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/list-emp-channel-connector-response"
+ '404':
+ description: Not found
+ content:
+ application/json:
+ schema:
+ oneOf:
+ - $ref: '#/components/schemas/federation-group-not-found'
+ - $ref: '#/components/schemas/tenant-not-found'
+ - $ref: '#/components/schemas/contact-not-found'
+ '403':
+ description: Forbidden
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/federation-group-emp-forbidden'
+ '406':
+ description: Not acceptable
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/not-applicable-for-external-network'
+ security:
+ - sfsAuthentication: [ ]
+ /api/v1/customer/phone-numbers:
+ get:
+ tags:
+ - CustomerPhoneNumber
+ summary: Get phone number details
+ operationId: getPhoneNumbers
+ description: Get phone numbers.
+ security:
+ - sfsAuthentication: [ ]
+ parameters:
+ - in: query
+ name: status
+ schema:
+ type: string
+ description: |
+ filter on the phone number status either
+ - USED
+ - FREE
+ - RELEASED
+ - ON_HOLD
+ - in: query
+ name: provider
+ schema:
+ type: string
+ description: |
+ filter on the provider
+ - UMONY
+ - CUSTOMER_SUPPLIED
+ - in: query
+ name: product
+ schema:
+ type: string
+ description: |
+ filter on the product
+ - VOICE
+ - SMS
+ - PRE_ALLOCATED_NUMBER
+ - PRE_ALLOCATED_FULL
+ - SECOND_NUMBER
+ - SECOND_NUMBER_FULL
+ - in: query
+ name: subNetwork
+ schema:
+ type: string
+ description: |
+ filter on the subnetwork:
+ - SECOND-NUMBER
+ - IN-NETWORK
+ responses:
+ '200':
+ description: Request processed
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/phone-numbers-details-response'
+ /api/v1/customer/phone-number/{phoneNumber}:
+ get:
+ tags:
+ - CustomerNumber
+ summary: Get information on a phone number provided by Symphony
+ operationId: getPhoneNumberInfos
+ description: >
+ Get information on a phone number provided by Symphony
+ security:
+ - sfsAuthentication: [ ]
+ parameters:
+ - in: path
+ name: phoneNumber
+ schema:
+ type: string
+ format: phone
+ required: true
+ description: Phone number provided by Symphony
+ responses:
+ '200':
+ description: Found phone number provided by Symphony
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/number-response'
+ '404':
+ description: Phone number not found
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/number-not-found'
+ put:
+ tags:
+ - CustomerNumber
+ summary: Update a phone number
+ operationId: updatePhoneNumber
+ description: |
+ This endpoint allows to update an existing phone number.
+
+ Currently, the following operations are supported:
+ - Unassign a phone number from an advisor (making it "on hold").
+ - Assign a phone number to a new advisor.
+ security:
+ - sfsAuthentication: [ ]
+ parameters:
+ - in: path
+ name: phoneNumber
+ schema:
+ type: string
+ format: phone
+ required: true
+ description: The phone number to update.
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/update-number-request'
+ responses:
+ '200':
+ description: The phone number was successfully updated.
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/number-response'
+ '400':
+ description: |
+ The advisor that the phone number is being associated to does not exist.
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/symphony-user-not-found-problem'
+ '403':
+ description: |
+ It is forbidden to update this phone number. This may happen if:
+ - The advisor associated with the phone number is still entitled to a direct EMP,
+ - The advisor that the phone number is being associated to is already entitled to a direct EMP with another
+ phone number.
+ content:
+ application/json:
+ schema:
+ oneOf:
+ - $ref: '#/components/schemas/advisor-still-entitled'
+ - $ref: '#/components/schemas/advisor-already-entitled-for-direct-emp'
+ '404':
+ description: |
+ May happen if the phone number to update was not found.
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/number-not-found'
+
+ /api/v1/customer/phone-number/{phoneNumber}/address:
+ get:
+ tags:
+ - CustomerNumber
+ summary: Get phone address
+ operationId: getPhoneAddress
+ description: >
+ Get phone address
+ security:
+ - sfsAuthentication: [ ]
+ parameters:
+ - in: path
+ name: phoneNumber
+ schema:
+ type: string
+ format: phone
+ required: true
+ description: Phone number
+ responses:
+ '200':
+ description: Found phone address
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/address-response'
+ '404':
+ description: Phone number not found
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/number-not-found'
+ put:
+ tags:
+ - CustomerNumber
+ summary: Update phone number's address
+ operationId: updatePhoneAddress
+ description: >
+ Update phone number's address
+ security:
+ - sfsAuthentication: [ ]
+ parameters:
+ - in: path
+ name: phoneNumber
+ schema:
+ type: string
+ format: phone
+ required: true
+ description: Phone number
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/address-request'
+ responses:
+ '204':
+ description: The phone number's address has been successfully updated
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/address-response'
+ '400':
+ description: Nothing to update
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/no-field-updated'
+ '404':
+ description: Phone number not found
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/number-not-found'
+ delete:
+ tags:
+ - CustomerNumber
+ summary: Remove phone number's address
+ operationId: removePhoneAddress
+ description: >
+ Remove phone number's address
+ security:
+ - sfsAuthentication: [ ]
+ parameters:
+ - in: path
+ name: phoneNumber
+ schema:
+ type: string
+ format: phone
+ required: true
+ description: Phone number
+ responses:
+ '204':
+ description: The phone number's address has been successfully removed
+ '404':
+ description: Phone number not found
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/number-not-found'
+
+ /api/v1/customer/advisors/{advisorSymphonyId}/phone-number:
+ get:
+ tags:
+ - CustomerNumber
+ summary: Get Advisor phone number details
+ operationId: getAdvisorPhoneNumbers
+ description: Get Advisor phone number details.
+ security:
+ - sfsAuthentication: [ ]
+ parameters:
+ - in: path
+ name: advisorSymphonyId
+ description: Advisor's symphony ID
+ required: true
+ schema:
+ type: string
+ pattern: '^\d+$'
+ responses:
+ '200':
+ description: Request processed
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/phone-number-info'
+ '404':
+ description: |
+ This may happen if:
+ - The advisor does not have any phone number associated.
+ - The requested advisor is not found.
+ content:
+ application/json:
+ schema:
+ oneOf:
+ - $ref: '#/components/schemas/phone-number-not-assigned'
+ - $ref: '#/components/schemas/advisor-not-found'
+
+components:
+ schemas:
+ phone-number-info:
+ type: object
+ properties:
+ phoneNumber:
+ type: string
+ example: 911234567890
+ subNetwork:
+ type: string
+ description: |
+ sub network of the phone, either:
+ - SECOND-NUMBER
+ - IN-NETWORK
+ country:
+ type: string
+ carrier:
+ type: string
+ status:
+ type: string
+ description: |
+ Phone number status
+ - USED
+ - FREE
+ - RELEASED
+ - ON_HOLD
+ productCode:
+ type: integer
+ product:
+ type: string
+ description: |
+ For fully ported or partially ported numbers
+ - PRE_ALLOCATED_NUMBER
+ - PRE_ALLOCATED_FULL
+ - SECOND_NUMBER
+ - SECOND_NUMBER_FULL
+ - VOICE (For In-Network numbers only)
+ - SMS (For In-Network numbers only)
+ provider:
+ type: string
+ enum:
+ - UMONY
+ - CUSTOMER_SUPPLIED
+ assignedTo:
+ $ref: '#/components/schemas/assigned-to'
+ externalNetworks:
+ type: array
+ items:
+ $ref: '#/components/schemas/external-network'
+ assigned-to:
+ type: object
+ properties:
+ advisorSymphonyId:
+ type: string
+ example: 911234567890
+ advisorFirstName:
+ type: string
+ advisorLastName:
+ type: string
+ external-network:
+ type: object
+ properties:
+ externalNetwork:
+ type: string
+ example: WHATSAPP-DIRECT
+ availability:
+ type: string
+ empStatus:
+ type: string
+ enum:
+ - CONNECTED
+ - DISCONNECTED
+ - PENDING
+ - UNKNOWN
+ phone-number-not-assigned:
+ type: object
+ description: 'The specified advisor does not have a phone number assigned'
+ properties:
+ type:
+ type: string
+ format: 'phone.number.not.assigned'
+ title:
+ type: string
+ format: 'The specified advisor does not have a phone number assigned'
+ status:
+ type: integer
+ format: "404"
+ entitlements-response:
+ type: object
+ properties:
+ entitlements:
+ example:
+ - WECHAT
+ - WHATSAPP
+ - SMS
+ - SMS-DIRECT
+ - LINE
+ entitled-response:
+ type: object
+ properties:
+ entitlements:
+ type: array
+ items:
+ $ref: "#/components/schemas/entitlement-response"
+ pagination:
+ $ref: "#/components/schemas/pagination"
+ search-contact-response:
+ type: object
+ properties:
+ firstName:
+ type: string
+ example: John
+ lastName:
+ type: string
+ example: Doe
+ companyName:
+ type: string
+ example: Company
+ emailAddress:
+ type: string
+ example: johndoe@symphony.com
+ phoneNumber:
+ type: string
+ example: 911234567890
+ externalNetwork:
+ type: string
+ description: "External network : WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
+ example: WHATSAPP
+ symphonyId:
+ type: string
+ example: 12345678912365
+ status:
+ $ref: '#/components/schemas/contact-status'
+ statusUpdateDate:
+ type: string
+ format: date-time
+ example: 1547661232368
+ ownAdvisorId:
+ type: string
+ example: 12345678912300
+ preferredLanguage:
+ type: string
+ example: English
+ invitationCode:
+ type: string
+ example: AB12DE43
+ room: # Room is null if the emp is not 1:1 only
+ $ref: '#/components/schemas/room-creation-response'
+ isColleague:
+ type: boolean
+ default: false
+ example: false
+ consent:
+ type: string
+ enum:
+ - OPTED_IN
+ - OPTED_OUT
+ - PENDING
+ example: PENDING
+ phoneNumberBlockedBy:
+ type: array
+ items:
+ $ref: '#/components/schemas/blocked-by-item'
+
+ entitlement-response:
+ type: object
+ properties:
+ symphonyId:
+ type: string
+ example: "14362370637825"
+ firstName:
+ type: string
+ example: William
+ lastName:
+ type: string
+ example: Smith
+ companyName:
+ type: string
+ example: Company
+ displayName:
+ type: string
+ example: William Smith
+ emailAddress:
+ type: string
+ example: william.smith@symphony.com
+ avatar:
+ type: string
+ example: "https://YOURDOMAIN.symphony.com/avatars/3gXMhglCCTwLPL9JAprnyHzYn5-PR49-wYDG814n1g8.png"
+ externalNetwork:
+ type: string
+ example: WHATSAPP_DIRECT
+ federationGroupId:
+ type: string
+ example: federationGroupId
+ status:
+ type: string
+ example: PRE_ENTITLED
+ phone:
+ $ref: "#/components/schemas/phone"
+ permissions:
+ type: array
+ items:
+ $ref: '#/components/schemas/permission-response'
+ phone:
+ type: object
+ description: "Phone number (direct EMP case)"
+ properties:
+ number:
+ type: string
+ example: "+1 234-567-8912"
+ product:
+ type: string
+ example: "PRE_ALLOCATED_HOSTED"
+ subNetwork:
+ type: string
+ description: "Sub-network: IN-NETWORK or SECOND-NUMBER"
+ example: "SECOND-NUMBER"
+ provider:
+ type: string
+ enum:
+ - UMONY
+ - CUSTOMER_SUPPLIED
+ list-emp-channel-connector-response:
+ type: object
+ properties:
+ empChannelConnectors:
+ type: array
+ items:
+ $ref: '#/components/schemas/emp-channel-connector-response'
+ emp-channel-connector-response:
+ allOf:
+ - $ref: "#/components/schemas/emp-channel-connector"
+ - type: object
+ properties:
+ available:
+ type: boolean
+ emp-channel-connector:
+ type: object
+ properties:
+ displayName:
+ type: string
+ example: Official Account Name
+ id:
+ type: string
+ example: 123456
+ add-entitlementv2-response:
+ type: object
+ properties:
+ symphonyId:
+ type: string
+ example: 14362370637825
+ firstName:
+ type: string
+ example: William
+ lastName:
+ type: string
+ example: Smith
+ companyName:
+ type: string
+ example: Company
+ displayName:
+ type: string
+ example: William Smith
+ emailAddress:
+ type: string
+ example: william.smith@symphony.com
+ avatar:
+ type: string
+ example: "https://YOURDOMAIN.symphony.com/avatars/3gXMhglCCTwLPL9JAprnyHzYn5-PR49-wYDG814n1g8.png"
+ externalNetwork:
+ type: string
+ example: WHATSAPP
+ permissions:
+ type: array
+ items:
+ $ref: "#/components/schemas/bulk-permission-item"
+ federationGroupId:
+ type: string
+ example: federationGroupId
+ ownContactId:
+ type: string
+ example: 14362370637825
+ status:
+ type: string
+ enum:
+ - PRE_ENTITLED
+ - ENTITLED
+ phone:
+ $ref: "#/components/schemas/phone"
+ invalid-page-cursor:
+ type: object
+ properties:
+ type:
+ type: string
+ format: invalid.page.cursor
+ title:
+ type: string
+ format: The provided cursor key is invalid or expired.
+ status:
+ type: integer
+ format: "400"
+ description: The provided cursor key is invalid or expired
+ entitlement-request:
+ required:
+ - externalNetwork
+ type: object
+ properties:
+ advisorEmailAddress:
+ type: string
+ example: william.smith@symphony.com
+ externalNetwork:
+ description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
+ type: string
+ example: WHATSAPP
+ symphonyId:
+ type: string
+ example: 12345678912365
+ advisorPhoneNumber:
+ description: "Required for the advisor to access SMS Direct In-Network and supported for SMS Direct Second-Number. Supported for the advisor to access WhatsApp Direct. However, note that the advisor’s phone number is not applicable for onboarding the advisor to other external networks (WeChat, WhatsApp, SMS or LINE)."
+ type: string
+ format: phone
+ permissions:
+ type: array
+ items:
+ type: string
+ federationGroupId:
+ type: string
+ example: federationGroupId
+ pre-entitlement-request:
+ type: object
+ required:
+ - advisorPhoneNumber
+ properties:
+ advisorPhoneNumber:
+ type: string
+ format: phone
+ federationGroupId:
+ type: string
+ entitlement-user-already-exists-problem:
+ type: object
+ properties:
+ type:
+ type: string
+ format: entitlement.already.exists
+ title:
+ type: string
+ format: Entitlement already exists.
+ status:
+ type: integer
+ format: "400"
+ description: Entitlement already exists.
+ advisor-phone-number-not-supported-problem:
+ type: object
+ properties:
+ type:
+ type: string
+ format: advisor.phone.number.not.supported
+ title:
+ type: string
+ format: Advisor's phone number not supported.
+ status:
+ type: integer
+ format: "400"
+ description: Advisor's phone number is not supported for this external network.
+ advisor-phone-number-is-required-problem:
+ type: object
+ properties:
+ type:
+ type: string
+ format: advisor.phone.number.is.required
+ title:
+ type: string
+ format: Advisor's phone number is required.
+ status:
+ type: integer
+ format: "400"
+ description: Advisor's phone number is required for this external network.
+ advisor-phone-number-already-used-problem:
+ type: object
+ properties:
+ type:
+ type: string
+ format: advisor.phone.number.already.used
+ title:
+ type: string
+ format: Advisor's phone number already used.
+ status:
+ type: integer
+ format: "409"
+ description: Advisor's phone number is already used.
+ pre-entitlement-permissions-not-supported-problem:
+ type: object
+ properties:
+ type:
+ type: string
+ format: 'pre.entitlement.permissions.not.supported'
+ title:
+ type: string
+ format: 'Permissions are not supported for pre-entitlements.'
+ status:
+ type: integer
+ format: "400"
+ contact-status:
+ type: string
+ enum:
+ - PENDING_CONFIRMATION
+ - CONFIRMED
+ - INVITE_EXPIRED
+ - UNAVAILABLE
+ - INCOMPLETE
+ - OPTED_IN
+ - OPTED_OUT
+ symphony-user-not-found-problem:
+ type: object
+ properties:
+ type:
+ type: string
+ format: symphony.user.not.found
+ title:
+ type: string
+ format: Symphony user not found.
+ status:
+ type: integer
+ format: "400"
+ description: Symphony user not found.
+ entitlement-type-not-found-problem:
+ type: object
+ properties:
+ type:
+ type: string
+ format: entitlement.type.not.found
+ title:
+ type: string
+ format: Entitlement type not found.
+ status:
+ type: integer
+ format: "400"
+ description: Entitlement type not found
+ forbidden-entitlement-type:
+ type: object
+ properties:
+ type:
+ type: string
+ format: forbidden.entitlement.type
+ title:
+ type: string
+ format: Forbidden entitlement.type.
+ status:
+ type: integer
+ format: "403"
+ description: Forbidden entitlement type.
+ pre-entitlement-phone-number-mismatch:
+ description: The phone number of the pre-entitlement does not match.
+ properties:
+ type:
+ type: string
+ format: pre.entitlement.phone.number.mismatch
+ title:
+ type: string
+ format: The phone number of the pre-entitlement does not match.
+ status:
+ type: integer
+ format: "409"
+ number-not-available:
+ type: object
+ description: Number not available
+ properties:
+ type:
+ type: string
+ format: number.not.available
+ title:
+ type: string
+ format: Number not available
+ status:
+ type: integer
+ format: "409"
+ number-registration-not-possible:
+ type: object
+ description: Number registration is not possible
+ properties:
+ type:
+ type: string
+ format: number.registration.not.possible
+ title:
+ type: string
+ format: Number registration not possible
+ detailMessage:
+ type: string
+ format: Detail message
+ status:
+ type: integer
+ format: "409"
+ tenant-configuration-not-found:
+ type: object
+ properties:
+ type:
+ type: string
+ format: tenant.configuration.not.found
+ title:
+ type: string
+ format: Tenant configuration not found.
+ status:
+ type: integer
+ format: "404"
+ description: Tenant configuration not found.
+ entitlement-not-found-problem:
+ type: object
+ properties:
+ type:
+ type: string
+ format: entitlement.not.found
+ title:
+ type: string
+ format: Entitlement not found.
+ status:
+ type: integer
+ format: "404"
+ description: Entitlement not found.
+ contact-not-found:
+ type: object
+ properties:
+ type:
+ type: string
+ format: contact.not.found
+ title:
+ type: string
+ format: Contact not found
+ status:
+ type: integer
+ format: "404"
+ description: Contact not found
+ company-not-found:
+ type: object
+ properties:
+ type:
+ type: string
+ format: company.not.found
+ title:
+ type: string
+ format: Company not found
+ status:
+ type: integer
+ format: "404"
+ description: Company not found
+ no-available-number:
+ type: object
+ properties:
+ type:
+ type: string
+ format: no.available.number
+ title:
+ type: string
+ format: No available number.
+ status:
+ type: integer
+ format: "500"
+ description: No available number.
+ incompatible-external-network-and-request-body:
+ type: object
+ description: 'Incompatible external network and request body.'
+ properties:
+ type:
+ type: string
+ format: 'incompatible.external.network.request.body'
+ title:
+ type: string
+ format: 'Incompatible external network and request body.'
+ status:
+ type: integer
+ format: "400"
+ user-id-mismatch:
+ type: object
+ description: 'The token userId does not match the request.'
+ properties:
+ type:
+ type: string
+ format: 'user.id.mismatch'
+ title:
+ type: string
+ format: 'The token userId does not match the request.'
+ status:
+ type: integer
+ format: "403"
+ phone-international-onboarding-forbidden:
+ type: object
+ description: 'Forbidden international onboarding.'
+ properties:
+ type:
+ type: string
+ format: 'phone.international.onboarding.forbidden'
+ title:
+ type: string
+ format: 'Forbidden international onboarding.'
+ status:
+ type: integer
+ format: "403"
+ deleteContacts-response:
+ type: object
+ properties:
+ report:
+ type: array
+ items:
+ $ref: "#/components/schemas/deleteContact-response"
+ deleteContact-response:
+ type: object
+ properties:
+ contact:
+ $ref: "#/components/schemas/deleteContact-request"
+ status:
+ $ref: "#/components/schemas/bulk-removal-status"
+ deleteContact-request:
+ required:
+ - advisorEmailAddress
+ - externalNetwork
+ - contactEmailAddress
+ type: object
+ properties:
+ advisorEmailAddress:
+ type: string
+ example: william.smith@symphony.com
+ contactEmailAddress:
+ type: string
+ format: email
+ example: johndoe@symphony.com
+ externalNetwork:
+ description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
+ type: string
+ example: WHATSAPP
+ customer-deleteAdvisorContacts-responsev2:
+ type: object
+ properties:
+ report:
+ type: array
+ items:
+ $ref: '#/components/schemas/customer-deleteAdvisorContact-responsev2'
+ customer-deleteAdvisorContact-responsev2:
+ type: object
+ properties:
+ contact:
+ $ref: '#/components/schemas/customer-deleteAdvisorContact-contact'
+ status:
+ $ref: '#/components/schemas/bulk-removal-status'
+ customer-deleteAdvisorContact-contact:
+ required:
+ - advisorSymphonyId
+ - phoneNumber
+ - externalNetwork
+ type: object
+ properties:
+ advisorSymphonyId:
+ type: string
+ example: 1234567890
+ phoneNumber:
+ type: string
+ example: +1 234567890
+ externalNetwork:
+ type: string
+ example: WHATSAPP
+ deleteContacts-request:
+ type: object
+ properties:
+ contacts:
+ type: array
+ items:
+ $ref: "#/components/schemas/deleteContact-request"
+ customer-contactWithId-response:
+ type: object
+ properties:
+ contact:
+ $ref: "#/components/schemas/customer-contactWithId"
+ status:
+ $ref: "#/components/schemas/bulk-removal-status"
+ customer-contactsWithId-response:
+ type: object
+ properties:
+ report:
+ type: array
+ items:
+ $ref: "#/components/schemas/customer-contactWithId-response"
+ customer-contactWithId:
+ type: object
+ properties:
+ advisorSymphonyId:
+ type: string
+ advisorEmailAddress:
+ type: string
+ contactEmailAddress:
+ type: string
+ externalNetwork:
+ type: string
+ deleteContacts-responsev2:
+ type: object
+ properties:
+ report:
+ type: array
+ items:
+ $ref: "#/components/schemas/deleteContact-responsev2"
+ deleteContact-responsev2:
+ type: object
+ properties:
+ contact:
+ $ref: "#/components/schemas/deleteContact-requestv2"
+ status:
+ $ref: "#/components/schemas/bulk-removal-statusv2"
+ deleteContact-requestv2:
+ required:
+ - advisorSymphonyId
+ - contactSymphonyId
+ type: object
+ properties:
+ advisorSymphonyId:
+ type: string
+ example: 1234567890
+ contactSymphonyId:
+ type: string
+ format: number
+ example: 1234567890
+ deleteContacts-requestv2:
+ type: object
+ properties:
+ contacts:
+ type: array
+ items:
+ $ref: "#/components/schemas/deleteContact-requestv2"
+ customer-contactWithId-responsev2:
+ type: object
+ properties:
+ contact:
+ $ref: "#/components/schemas/customer-contactWithIdv2"
+ status:
+ $ref: "#/components/schemas/bulk-removal-status"
+ customer-contactsWithId-responsev2:
+ type: object
+ properties:
+ report:
+ type: array
+ items:
+ $ref: "#/components/schemas/customer-contactWithId-responsev2"
+ customer-contactWithIdv2:
+ type: object
+ properties:
+ advisorSymphonyId:
+ type: string
+
+ advisor-not-found:
+ type: object
+ properties:
+ type:
+ type: string
+ example: advisor.not.found
+ title:
+ type: string
+ example: advisor not found
+ status:
+ type: integer
+ example: 404
+ description: Advisor not found
+ advisor-id-not-provided:
+ description: 'Advisor ID or email not provided'
+ properties:
+ type:
+ type: string
+ format: 'advisor.identifier.not.provided'
+ title:
+ type: string
+ format: 'Advisor ID or email not provided.'
+ status:
+ type: integer
+ example: 400
+ not-a-room-member:
+ type: object
+ description: 'Not a room member.'
+ properties:
+ type:
+ type: string
+ format: 'not.a.room.member'
+ title:
+ type: string
+ format: 'Not a room member.'
+ status:
+ type: integer
+ example: 409
+
+ already-room-owner:
+ type: object
+ description: 'Advisor already room owner.'
+ properties:
+ type:
+ type: string
+ format: 'advisor.already.room.owner'
+ title:
+ type: string
+ format: 'Advisor already room owner.'
+ status:
+ type: integer
+ example: 409
+
+ cannot-transfer-room-ownership-duplicate-room-name:
+ type: object
+ description: 'Cannot transfer room ownership because the advisor is already owner of a room with the same name'
+ properties:
+ type:
+ type: string
+ format: 'cannot.transfer.room.ownership.duplicate.room.name'
+ title:
+ type: string
+ format: 'Cannot transfer room ownership because the advisor is already owner of a room with the same name'
+ status:
+ type: integer
+ example: 409
+
+ room-is-deactivated:
+ type: object
+ description: The Room is Deactivated.
+ properties:
+ type:
+ type: string
+ format: room.is.deactivated
+ title:
+ type: string
+ format: The Room is Deactivated.
+ status:
+ type: integer
+ example: 409
+ roomName:
+ type: string
+ nullable: true
+ format: name of the deactivated room
+ Unauthorized:
+ type: object
+ properties:
+ type:
+ type: string
+ example: unauthorized
+ title:
+ type: string
+ example: Unauthorized
+ status:
+ type: integer
+ example: 401
+ description: Full authentication is required to access this resource
+ Forbidden:
+ type: object
+ properties:
+ type:
+ type: string
+ example: Forbidden
+ title:
+ type: string
+ example: Forbidden
+ status:
+ type: integer
+ example: 403
+ description: Access is denied, you don't have the permission to perform this operation
+ permissions-response:
+ type: object
+ properties:
+ permissions:
+ type: array
+ items:
+ $ref: "#/components/schemas/list-permission-response"
+ enhanced-permissions-response:
+ type: object
+ properties:
+ permissions:
+ type: array
+ items:
+ $ref: "#/components/schemas/enhanced-permission-response"
+ enhanced-permission-response:
+ type: object
+ properties:
+ isDefault:
+ type: boolean
+ permissionId:
+ type: string
+ permissionName:
+ type: string
+ bulk-permission-item:
+ type: object
+ properties:
+ status:
+ type: integer
+ example: 200
+ response:
+ $ref: "#/components/schemas/permission-response"
+ error:
+ $ref: "#/components/schemas/bulk-item-error"
+ list-permission-response:
+ type: string
+ example: "create:room"
+ permission-response:
+ type: object
+ properties:
+ permissionName:
+ type: string
+ example: "create:room"
+ permissionId:
+ type: string
+ example: "aef488fa-636e-483e-b366-278e07354e57"
+ advisor-permissions-response:
+ type: object
+ properties:
+ advisorSymphonyId:
+ type: string
+ example: 14362370637825
+ externalNetwork:
+ description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
+ type: string
+ example: WHATSAPP
+ permissions:
+ type: array
+ items:
+ $ref: "#/components/schemas/permission-response"
+ advisors-permission-requestv2:
+ required:
+ - advisorSymphonyIds
+ - externalNetwork
+ - permissionName
+ type: object
+ properties:
+ advisorSymphonyIds:
+ type: array
+ items:
+ type: string
+ example: 1234567890
+ externalNetwork:
+ description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
+ type: string
+ example: WHATSAPP
+ permissionName:
+ type: string
+ example: "create:room"
+ advisors-permission-request:
+ required:
+ - advisorEmailAddress
+ - externalNetwork
+ - permissionName
+ type: object
+ properties:
+ advisorEmailAddress:
+ type: array
+ items:
+ type: string
+ example: william.smith@symphony.com
+ externalNetwork:
+ description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
+ type: string
+ example: WHATSAPP
+ permissionName:
+ type: string
+ example: "create:room"
+ advisor-permission-request:
+ required:
+ - permissionName
+ type: object
+ properties:
+ permissionName:
+ type: string
+ example: "create:room"
+ advisor-permission-response:
+ type: object
+ properties:
+ advisorSymphonyId:
+ type: string
+ example: 14362370637825
+ externalNetwork:
+ description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
+ type: string
+ example: WHATSAPP
+ permission:
+ $ref: "#/components/schemas/permission-response"
+ permission-not-found:
+ type: object
+ properties:
+ type:
+ type: string
+ format: permission.not.found
+ title:
+ type: string
+ format: Permission not found.
+ status:
+ type: integer
+ format: "404"
+ description: Permission not found.
+ permission-already-assigned:
+ type: object
+ properties:
+ type:
+ type: string
+ format: permission.already.assigned
+ example: permission.already.assigned
+ title:
+ type: string
+ format: Permission already assigned.
+ example: Permission already assigned.
+ status:
+ type: integer
+ format: "409"
+ example: 409
+ description: Permission already assigned.
+ missing-destination-federation-group:
+ type: object
+ properties:
+ type:
+ type: string
+ format: missing.destination.federation.group
+ title:
+ type: string
+ format: Missing destination federation group
+ status:
+ type: integer
+ format: "400"
+ multiple-destination-federation-group:
+ type: object
+ properties:
+ type:
+ type: string
+ format: multiple.destination.federation.group
+ title:
+ type: string
+ format: Multiple destination federation group
+ status:
+ type: integer
+ format: "400"
+ bulk-advisor-permission-response:
+ type: object
+ properties:
+ advisorsPermissions:
+ type: array
+ items:
+ $ref: "#/components/schemas/bulk-advisor-permission-item-response"
+ bulk-advisor-permission-item-response:
+ type: object
+ properties:
+ status:
+ type: integer
+ response:
+ $ref: "#/components/schemas/advisor-permission-response"
+ error:
+ $ref: "#/components/schemas/bulk-item-error"
+ multiple-advisor-permission-response:
+ type: object
+ properties:
+ advisorsPermissions:
+ type: array
+ items:
+ type: object
+ properties:
+ status:
+ type: integer
+ example: 200
+ response:
+ type: object
+ properties:
+ advisorSymphonyId:
+ type: string
+ description: Symphony user ID of the advisor
+ example: "12345678912365"
+ email:
+ type: string
+ description: email adress of the advisor
+ example: "william.smith@symphony.com"
+ externalNetwork:
+ description: WHATSAPP
+ type: string
+ example: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
+ permission:
+ type: object
+ properties:
+ permissionName:
+ type: string
+ example: "create:room"
+ error:
+ type: object
+ description: Should an error occur while adding or removing the permission, this returned object will provide details about the error(s)
+ properties:
+ title:
+ type: string
+ example: advisor.not.found
+ detail:
+ type: string
+ example: "Advisor 68719476737 does not exist"
+ customer-contact-request:
+ allOf:
+ - $ref: "#/components/schemas/contact-request"
+ - required:
+ - onboarderEmailAddress
+ type: object
+ properties:
+ advisorEmailAddresses:
+ type: array
+ description: A list of email addresses of the advisor to whom the contact is to be added. For WeChat, an "onboarder" is an advisor with the permission "create:contact". For WhatsApp, SMS, SMS Direct and LINE, the permission is set by default.
+ items:
+ type: string
+ format: email
+ example: william.smith@symphony.com
+ onboarderEmailAddress:
+ type: string
+ example: william.smith@symphony.com
+ description: If both advisorSymphonyIds and advisorEmailAddresses are empty, the contact will be added to the onboarder with this email address.
+ createRoom:
+ type: boolean
+ description: Can be set to false in order to prevent the room creation when onboarding a contact on SMS Direct or WhatsApp Direct. This parameter can't be set to true for WhatsApp, SMS, Wechat and LINE for now.
+ add-contact-response:
+ type: object
+ properties:
+ firstName:
+ type: string
+ example: John
+ lastName:
+ type: string
+ example: Doe
+ companyName:
+ type: string
+ example: Company
+ emailAddress:
+ type: string
+ example: johndoe@symphony.com
+ phoneNumber:
+ type: string
+ example: 911234567890
+ externalNetwork:
+ description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
+ type: string
+ example: WHATSAPP
+ symphonyId:
+ type: string
+ example: 12345678912365
+ status:
+ type: string
+ enum:
+ - PENDING_CONFIRMATION
+ - CONFIRMED
+ - INVITE_EXPIRED
+ - CANCELED
+ - UNAVAILABLE
+ - INCOMPLETE
+ statusUpdateDate:
+ type: string
+ format: date-time
+ example: 1547661232368
+ preferredLanguage:
+ type: string
+ example: CHINESE_CHN, CHINESE_HKG, CHINESE_TAI, JAPANESE (among others, see release note for more)
+ invitationCode:
+ type: string
+ example: "AB12DE43"
+ phoneNumberBlockedBy:
+ type: array
+ items:
+ $ref: '#/components/schemas/blocked-by-item'
+ list-contact-response:
+ type: object
+ properties:
+ contacts:
+ type: array
+ items:
+ $ref: "#/components/schemas/find-contact-response-v2-with-block-status"
+ pagination:
+ $ref: "#/components/schemas/pagination"
+ find-contact-response:
+ type: object
+ properties:
+ firstName:
+ type: string
+ example: John
+ lastName:
+ type: string
+ example: Doe
+ companyName:
+ type: string
+ example: Company
+ emailAddress:
+ type: string
+ example: johndoe@symphony.com
+ phoneNumber:
+ type: string
+ example: 911234567890
+ externalNetwork:
+ description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
+ type: string
+ example: WHATSAPP
+ symphonyId:
+ type: string
+ example: 12345678912365
+ advisors:
+ type: array
+ description: Advisors Symphony IDs
+ items:
+ type: string
+ example: [123456789, 369258147, 7896564123]
+ status:
+ type: string
+ enum: [PENDING_CONFIRMATION, CONFIRMED, INVITE_EXPIRED, CANCELED, UNAVAILABLE, INCOMPLETE]
+ isColleague:
+ type: boolean
+ default: false
+ find-contact-response-v2-with-block-status: #Not added yet in "Get contact by phone number"
+ allOf:
+ - $ref: "#/components/schemas/find-contact-response-v2"
+ - $ref: '#/components/schemas/blocked-by-item'
+ find-contact-response-v2:
+ allOf:
+ - $ref: "#/components/schemas/find-contact-response"
+ - type: object
+ properties:
+ preferredLanguage:
+ type: string
+ example: CHINESE_CHN, CHINESE_HKG, CHINESE_TAI, JAPANESE (among others, see release note for more)
+ blocked-by-item:
+ type: object
+ properties:
+ advisorSymphonyId:
+ type: string
+ format: phone
+ reason:
+ $ref: '#/components/schemas/blocking-reason-enum'
+ comment:
+ type: string
+ requestDate:
+ type: string
+ format: date-time
+
+ external-network-not-found:
+ type: object
+ properties:
+ type:
+ type: string
+ format: external.network.not.found
+ example: Bad request
+ title:
+ type: string
+ format: External network not found.
+ example: Bad request
+ status:
+ type: integer
+ format: "400"
+ example: 400
+ description: External network not found.
+ invalid-user-info:
+ type: object
+ properties:
+ type:
+ type: string
+ format: invalid.user.information
+ title:
+ type: string
+ format: Invalid user information
+ status:
+ type: integer
+ format: "400"
+ example: 400
+ description: Invalid user information
+ rename-room-forbidden:
+ type: object
+ description: 'Rename room forbidden'
+ properties:
+ type:
+ type: string
+ format: 'rename.room.forbidden'
+ title:
+ type: string
+ format: 'Not allowed to rename the room.'
+ status:
+ type: integer
+ format: "403"
+ different-room-name-required:
+ type: object
+ description: 'Different room name is required.'
+ properties:
+ type:
+ type: string
+ format: 'different.room.name.required'
+ title:
+ type: string
+ format: 'Different room name is required.'
+ status:
+ type: integer
+ format: "409"
+ cannot-rename-room-duplicate-room-name:
+ type: object
+ description: 'Cannot rename room because the owner already has a room with the same name.'
+ properties:
+ type:
+ type: string
+ format: 'cannot.rename.room.duplicate.room.name'
+ title:
+ type: string
+ format: 'Cannot rename room because the owner already has a room with the same name.'
+ status:
+ type: integer
+ format: "409"
+ rename-room-failed:
+ type: object
+ description: 'Failed to rename the room.'
+ properties:
+ type:
+ type: string
+ format: 'rename.room.failed'
+ title:
+ type: string
+ format: 'Unable to rename the room.'
+ status:
+ type: integer
+ format: "500"
+ forbidden-advisor:
+ type: object
+ properties:
+ type:
+ type: string
+ format: onboarding.forbidden.advisor
+ title:
+ type: string
+ format: This Advisor is not permissioned for Onboarding.
+ status:
+ type: integer
+ format: "403"
+ description: This Advisor is not permissioned for Onboarding.
+ forbidden-onboarder:
+ type: object
+ properties:
+ type:
+ type: string
+ format: onboarding.forbidden.onboarder
+ title:
+ type: string
+ format: This Onboarder is not entitled for this external network.
+ #find where to define "onboarder" = Advisor with onboarding permission. Need to modify API code to change this message
+ status:
+ type: integer
+ format: "403"
+ description: This Onboarder is not entitled for this external network.
+ #find where to define "onboarder" = Advisor with onboarding permission. Need to modify API code to change this message
+ user-already-onboarded:
+ type: object
+ properties:
+ type:
+ type: string
+ format: user.already.onboarded
+ title:
+ type: string
+ format: Contact already onboarded.
+ status:
+ type: integer
+ format: "409"
+ description: Contact already onboarded.
+ user-already-exists:
+ type: object
+ properties:
+ type:
+ type: string
+ format: user.already.exists
+ title:
+ type: string
+ format: Contact already exists.
+ status:
+ type: integer
+ format: "409"
+ description: Contact already exists.
+ create-account-failed:
+ type: object
+ properties:
+ type:
+ type: string
+ format: account.creation.failed
+ title:
+ type: string
+ format: Unable to create the account.
+ status:
+ type: integer
+ format: "500"
+ description: Gateway microservice cannot create the Symphony account.
+ customer-update-contacts-requestv2:
+ required:
+ - firstName
+ - lastName
+ - companyName
+ - phoneNumber
+ - advisorSymphonyId
+ type: object
+ properties:
+ firstName:
+ type: string
+ example: John
+ lastName:
+ type: string
+ example: DoeABC
+ companyName:
+ type: string
+ example: Company
+ maxLength: 100
+ phoneNumber:
+ type: string
+ format: phone
+ example: 911234567890
+ emailAddress:
+ type: string
+ example: johndoe@symphony.com
+ advisorSymphonyId:
+ type: string
+ pattern: '^\d+$'
+ example: 1234567890
+ preferredLanguage:
+ type: string
+ description: Contact preferred language. Refer to contact preferred language section at the beginning of this documentation for valid language name.
+ example: CHINESE_CHN, CHINESE_HKG, CHINESE_TAI, JAPANESE, etc.
+ customer-update-contacts-request:
+ allOf:
+ - $ref: "#/components/schemas/update-contacts-request"
+ - required:
+ - advisorEmailAddress
+ type: object
+ properties:
+ advisorEmailAddress:
+ type: string
+ format: email
+ example: william.smith@symphony.com
+ update-contacts-response:
+ type: object
+ properties:
+ firstName:
+ type: string
+ example: John
+ lastName:
+ type: string
+ example: DoeABC
+ companyName:
+ type: string
+ example: Company
+ emailAddress:
+ type: string
+ example: johndoe@symphony.com
+ phoneNumber:
+ type: string
+ example: 911234567890
+ externalNetwork:
+ description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
+ type: string
+ example: WHATSAPP
+ symphonyId:
+ type: string
+ description: Federated user Symphony ID
+ example: 12345678912365
+ advisors:
+ type: array
+ description: Advisors Symphony IDs
+ items:
+ type: string
+ example: 14362370637825
+ update-contacts-response-v2:
+ type: object
+ properties:
+ firstName:
+ type: string
+ example: John
+ lastName:
+ type: string
+ example: DoeABC
+ companyName:
+ type: string
+ example: Company
+ emailAddress:
+ type: string
+ example: johndoe@symphony.com
+ phoneNumber:
+ type: string
+ example: 911234567890
+ symphonyId:
+ type: string
+ description: Federated user Symphony id
+ example: 12345678912365
+ advisors:
+ type: array
+ description: Advisors Symphony IDs
+ items:
+ type: string
+ example: 14362370637825
+ preferredLanguage:
+ type: string
+ description: Contact preferred language
+ example: CHINESE_CHN, CHINESE_HKG, CHINESE_TAI, JAPANESE, etc.
+ update-forbidden-for-advisor:
+ type: object
+ properties:
+ type:
+ type: string
+ format: update.forbidden.advisor
+ title:
+ type: string
+ format: Contacts update is forbidden for this Advisor.
+ status:
+ type: integer
+ format: "403"
+ description: Contacts update is forbidden for this Advisor.
+ update-forbidden-for-contact:
+ type: object
+ properties:
+ type:
+ type: string
+ format: update.forbidden.contact
+ title:
+ type: string
+ format: Update forbidden for this contact.
+ status:
+ type: integer
+ format: "403"
+ description: Update forbidden for this contact.
+ multi-tenant-federated-user-update-attempt:
+ type: object
+ properties:
+ type:
+ type: string
+ format: multi.tenant.federated.user.update.attempt
+ title:
+ type: string
+ format: Found Contact records spanning across more than one tenant.
+ status:
+ type: integer
+ format: "403"
+ description: Found Contact records spanning across more than one tenant.
+ cannot-edit-advisor-own-contact-email:
+ type: object
+ properties:
+ type:
+ type: string
+ format: cannot.edit.advisor.own.contact.email
+ title:
+ type: string
+ format: Cannot edit advisor own contact email.
+ status:
+ type: integer
+ format: "403"
+ description: Cannot edit advisor own contact email
+ update-account-failed:
+ type: object
+ properties:
+ type:
+ type: string
+ format: account.update.failed
+ title:
+ type: string
+ format: Unable to update the Contact.
+ status:
+ type: integer
+ format: "500"
+ description: Gateway microservice cannot update the Symphony account.
+ advisors-search-response:
+ type: object
+ properties:
+ advisors:
+ type: array
+ items:
+ $ref: "#/components/schemas/entitlement-response"
+ pagination:
+ $ref: "#/components/schemas/pagination"
+ search-contacts-response:
+ type: object
+ properties:
+ contacts:
+ type: array
+ items:
+ $ref: '#/components/schemas/search-contact-response'
+ pagination:
+ $ref: '#/components/schemas/pagination'
+
+ contacts-response:
+ type: object
+ properties:
+ contacts:
+ type: array
+ items:
+ $ref: "#/components/schemas/add-contact-response"
+ pagination:
+ $ref: "#/components/schemas/pagination"
+ rooms-response:
+ type: object
+ properties:
+ rooms:
+ type: array
+ items:
+ $ref: "#/components/schemas/room-response"
+ pagination:
+ $ref: "#/components/schemas/pagination"
+ room-response:
+ type: object
+ properties:
+ streamId:
+ type: string
+ example: bjHSiY4iz3ar4iIh6-VzCX___peoM7cPdA
+ roomName:
+ type: string
+ example: API room
+ advisorSymphonyId:
+ type: string
+ example: 12345678912365
+ federationGroupId:
+ type: string
+ example: federationGroupId
+ created:
+ type: string
+ format: date-time
+ example: 1547661232368
+ updated:
+ type: string
+ format: date-time
+ example: 1547661232370
+ roomType:
+ type: string
+ enum:
+ - ROOM
+ - IM
+ membersCount:
+ type: integer
+ example: 1
+ company:
+ type: string
+ example: Company
+ roomStatus:
+ type: string
+ enum:
+ - ACTIVE
+ - LIMITED
+ - DEACTIVATED
+ - UNKNOWN
+ limitedMembersCount:
+ type: integer
+ example: 1
+ pendingMembersCount:
+ type: integer
+ example: 2
+ unknownStatusMembersCount:
+ type: integer
+ example: 0
+ room-creation-response:
+ type: object
+ properties:
+ streamId:
+ type: string
+ example: bjHSiY4iz3ar4iIh6-VzCX___peoM7cPdA
+ roomName:
+ type: string
+ example: API room
+ advisorSymphonyId:
+ type: string
+ example: 12345678912365
+ federationGroupId:
+ type: string
+ example: federationGroupId
+ created:
+ type: string
+ format: date-time
+ example: 1547661232368
+ updated:
+ type: string
+ format: date-time
+ example: 1547661232370
+ roomType:
+ type: string
+ enum:
+ - ROOM
+ - IM
+ membersCount:
+ type: integer
+ example: 1
+ room-creation-response-v2:
+ allOf:
+ - $ref: "#/components/schemas/room-creation-response"
+ - type: object
+ properties:
+ externalNetworkRoomDisplayName:
+ type: string
+ room-request:
+ required:
+ - advisorEmailAddress
+ - externalNetwork
+ - roomName
+ type: object
+ properties:
+ roomName:
+ maxLength: 50
+ type: string
+ example: API room
+ advisorEmailAddress:
+ type: string
+ format: email
+ example: william.smith@symphony.com
+ externalNetwork:
+ description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
+ maxLength: 50
+ type: string
+ example: WHATSAPP
+ room-requestv2:
+ required:
+ - ownerSymphonyId
+ - externalNetwork
+ - roomName
+ type: object
+ properties:
+ roomName:
+ maxLength: 50
+ type: string
+ example: API room
+ federationGroupId:
+ type: string
+ example: federationGroupId
+ externalNetworkRoomDisplayName:
+ maxLength: 50
+ type: string
+ example: API room
+ ownerSymphonyId:
+ type: string
+ format: number
+ example: 1234567890
+ externalNetwork:
+ description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
+ maxLength: 50
+ type: string
+ example: WHATSAPP
+ rename-room-request:
+ type: object
+ required:
+ - newRoomName
+ properties:
+ newRoomName:
+ type: string
+ minLength: 1
+ maxLength: 50
+ transfer-room-ownership-request:
+ type: object
+ required:
+ - newRoomOwnerSymphonyId
+ properties:
+ newRoomOwnerSymphonyId:
+ type: string
+ format: number
+ example: 1234567890
+ rename-room-response:
+ type: object
+ properties:
+ streamId:
+ type: string
+ oldRoomName:
+ type: string
+ newRoomName:
+ type: string
+ connection-not-accepted:
+ type: object
+ properties:
+ type:
+ type: string
+ format: connection.not.accepted
+ title:
+ type: string
+ format: connection with Symphony Connect Assistant is not accepted
+ status:
+ type: integer
+ format: "400"
+ description: Connection with Symphony Connect Assistant is not accepted
+ federated-account-not-found:
+ type: object
+ properties:
+ type:
+ type: string
+ format: federated.account.not.found
+ title:
+ type: string
+ format: federated account not found
+ status:
+ type: integer
+ format: "404"
+ description: FederatedAccount not found.
+ room-already-exists:
+ type: object
+ properties:
+ type:
+ type: string
+ format: room.already.exists
+ title:
+ type: string
+ format: Room already exists.
+ status:
+ type: integer
+ format: "409"
+ description: Room already exists.
+ create-room-failed:
+ type: object
+ properties:
+ type:
+ type: string
+ format: room.creation.failed
+ title:
+ type: string
+ format: Unable to create the room.
+ status:
+ type: integer
+ format: "500"
+ description: Gateway microservice cannot create the room.
+ missing-connection-with-connect-bot:
+ type: object
+ properties:
+ type:
+ type: string
+ format: missing.connection.with.connect.bot
+ title:
+ type: string
+ format: connection with Symphony Connect Assistant does not exist
+ status:
+ type: integer
+ format: "500"
+ description: Connection with Symphony Connect Assistant does not exist
+ room-members-response:
+ type: object
+ properties:
+ members:
+ type: array
+ items:
+ $ref: "#/components/schemas/room-member-response"
+ pagination:
+ $ref: "#/components/schemas/pagination"
+ room-member-response:
+ type: object
+ properties:
+ streamId:
+ type: string
+ example: bjHSiY4iz3ar4iIh6-VzCX___peoM7cPdA
+ symphonyId:
+ type: string
+ example: 12345678912365
+ federatedUserId:
+ type: string
+ example: 14362370637825
+ externalNetwork:
+ description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
+ type: string
+ example: WHATSAPP
+ firstName:
+ type: string
+ example: John
+ lastName:
+ type: string
+ example: Doe
+ companyName:
+ type: string
+ example: Company
+ avatar:
+ type: string
+ example: "https://YOURDOMAIN.symphony.com/avatars/3gXMhglCCTwLPL9JAprnyHzYn5-PR49-wYDG814n1g8.png"
+ displayName:
+ type: string
+ example: John Doe
+ emailAddress:
+ type: string
+ example: johndoe@symphony.com
+ isOwner:
+ type: boolean
+ example: false
+ empChannelConnector:
+ allOf:
+ - $ref: "#/components/schemas/emp-channel-connector"
+ description: "Network channel connector used for room member. Only for LINE"
+ room-set-activity-response:
+ type: object
+ properties:
+ isRoomActivityUpdated:
+ type: boolean
+ newRoomStatus:
+ type: string
+ enum:
+ - ACTIVE
+ - DEACTIVATED
+ remove-room-members-response:
+ type: object
+ properties:
+ isRoomDeleted:
+ type: boolean
+ advisor-contact-rooms-response:
+ type: object
+ description: Rooms for an advisor and contact
+ properties:
+ advisorSymphonyId:
+ type: string
+ format: string
+ pattern: '^\d+$'
+ example: 1234567890
+ contactSymphonyId:
+ type: string
+ format: string
+ pattern: '^\d+$'
+ example: 1234567890
+ sortedBy:
+ type: string
+ enum:
+ - createdDate_DESC
+ rooms:
+ type: array
+ description: Room basic information
+ items:
+ $ref: '#/components/schemas/room-basic-information'
+ room-basic-information:
+ type: object
+ properties:
+ stream-id:
+ type: string
+ room-name:
+ type: string
+ emp:
+ type: string
+ created-date:
+ type: integer
+ format: int64
+ remove-room-member-forbidden:
+ type: object
+ properties:
+ type:
+ type: string
+ format: remove.room.member.forbidden
+ title:
+ type: string
+ format: Remove room member forbidden
+ status:
+ type: integer
+ format: "403"
+ description: Remove room member forbidden
+ room-not-found:
+ type: object
+ properties:
+ type:
+ type: string
+ format: room.not.found
+ title:
+ type: string
+ format: Room not found
+ status:
+ type: integer
+ format: "404"
+ description: Room not found
+ room-member-not-found:
+ type: object
+ properties:
+ type:
+ type: string
+ format: room.member.not.found
+ title:
+ type: string
+ format: Room member not found
+ status:
+ type: integer
+ format: "404"
+ description: Room member not found
+ update-room-status-failed:
+ type: object
+ description: 'Gateway microservice cannot update the status of the room.'
+ properties:
+ type:
+ type: string
+ format: 'update.room.status.failed'
+ title:
+ type: string
+ format: 'Unable to update the status of the room.'
+ status:
+ type: integer
+ format: "500"
+ reactivate-room-not-implemented:
+ type: object
+ description: 'Reactivate Room Not Implemented'
+ properties:
+ type:
+ type: string
+ format: 'reactivate.room.not.implemented'
+ title:
+ type: string
+ format: 'Reactivate Room Not Implemented'
+ status:
+ type: integer
+ format: "501"
+ room-features-request:
+ type: object
+ properties:
+ attachmentsDisabled:
+ description: Allows to enable or disable attachments in a room. Only supported for WhatsApp.
+ type: boolean
+ room-set-activity-request:
+ type: object
+ required:
+ - setActive
+ properties:
+ setActive:
+ type: boolean
+ room-member-request:
+ required:
+ - advisorEmailAddress
+ - externalNetwork
+ - contact
+ - memberEmailAddress
+ - streamId
+ type: object
+ properties:
+ streamId:
+ type: string
+ example: bjHSiY4iz3ar4iIh6-VzCX___peoM7cPdA
+ memberEmailAddress:
+ type: string
+ format: email
+ example: johndoe@symphony.com
+ advisorEmailAddress:
+ type: string
+ format: email
+ example: william.smith@symphony.com
+ externalNetwork:
+ description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
+ type: string
+ example: WHATSAPP
+ contact:
+ type: boolean
+ example: true
+ room-member-requestv2:
+ required:
+ - advisorSymphonyId
+ - memberSymphonyId
+ - externalNetwork
+ - contact
+ type: object
+ properties:
+ memberSymphonyId:
+ type: string
+ format: number
+ example: 1234567890
+ advisorSymphonyId:
+ type: string
+ format: number
+ example: 1234567890
+ externalNetwork:
+ description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
+ type: string
+ example: WHATSAPP
+ contact:
+ description: "Boolean indicating whether added member is an advisor (false) or a federated user (true)"
+ type: boolean
+ default: false
+ empChannelConnector:
+ description: "ID of the Emp channel Connector to use to reach the federated user. Required for LINE in case automatic LINE channel selection feature is not enabled for your tenant, not applicable for the other external networks."
+ type: string
+ multi-external-network-room-not-supported:
+ type: object
+ properties:
+ type:
+ type: string
+ format: multi.external.network.room.not.supported
+ title:
+ type: string
+ format: multi external network rooms not supported
+ status:
+ type: integer
+ format: "400"
+ description: Multi-External network rooms are not supported.
+ multi-company-room-not-supported:
+ type: object
+ properties:
+ type:
+ type: string
+ format: multi.company.room.not.supported
+ title:
+ type: string
+ format: multi company rooms not supported
+ status:
+ type: integer
+ format: "400"
+ description: Multi-Company rooms are not supported.
+ member-already-in-room:
+ type: object
+ properties:
+ type:
+ type: string
+ format: member.already.in.room
+ title:
+ type: string
+ format: Member already in room.
+ status:
+ type: integer
+ format: "409"
+ description: Member already in room.
+ add-room-member-failed:
+ type: object
+ properties:
+ type:
+ type: string
+ format: add.room.member.failed
+ title:
+ type: string
+ format: Unable to add the member to room.
+ status:
+ type: integer
+ format: "500"
+ description: Gateway microservice cannot create/add the member to room.
+ add-room-member-conflicted:
+ type: object
+ description: Gateway microservice cannot create/add the member in the room.
+ properties:
+ type:
+ type: string
+ format: add.room.member.conflicted
+ title:
+ type: string
+ format: Unable to add the member in the room.
+ status:
+ type: integer
+ format: "409"
+ bulk-room-member-multi-room-requestv2:
+ type: object
+ properties:
+ requests:
+ maxItems: 20
+ minItems: 1
+ type: array
+ items:
+ $ref: "#/components/schemas/room-member-multi-room-requestv2"
+ advisorSymphonyId:
+ type: string
+ format: number
+ example: 1234567890
+ externalNetwork:
+ description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
+ type: string
+ example: WHATSAPP
+ room-member-multi-room-requestv2:
+ required:
+ - memberSymphonyId
+ - streamId
+ type: object
+ properties:
+ streamId:
+ type: string
+ example: bjHSiY4iz3ar4iIh6-VzCX___peoM7cPdA
+ memberSymphonyId:
+ type: string
+ format: number
+ example: 1234567890
+ empChannelConnector:
+ type: string
+ format: string
+ example: SYM0001
+ bulk-room-member-responsev2:
+ type: object
+ properties:
+ members:
+ type: array
+ items:
+ $ref: "#/components/schemas/bulk-room-member-item-responsev2"
+ bulk-room-member-item-responsev2:
+ type: object
+ properties:
+ status:
+ type: integer
+ response:
+ $ref: "#/components/schemas/room-member-response"
+ error:
+ $ref: "#/components/schemas/bulk-item-error"
+ bulk-room-member-multi-room-request:
+ type: object
+ properties:
+ requests:
+ maxItems: 100
+ minItems: 1
+ type: array
+ items:
+ $ref: "#/components/schemas/room-member-multi-room-request"
+ advisorEmailAddress:
+ type: string
+ format: email
+ example: william.smith@symphony.com
+ externalNetwork:
+ description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
+ type: string
+ example: WHATSAPP
+ room-member-multi-room-request:
+ required:
+ - contact
+ - memberEmailAddress
+ - streamId
+ type: object
+ properties:
+ streamId:
+ type: string
+ example: bjHSiY4iz3ar4iIh6-VzCX___peoM7cPdA
+ memberEmailAddress:
+ type: string
+ format: email
+ example: johndoe@symphony.com
+ contact:
+ type: boolean
+ example: true
+ bulk-room-member-response:
+ type: object
+ properties:
+ members:
+ type: array
+ items:
+ $ref: "#/components/schemas/bulk-room-member-item-response"
+ bulk-room-member-item-response:
+ type: object
+ properties:
+ status:
+ type: integer
+ response:
+ $ref: "#/components/schemas/room-member-response"
+ error:
+ $ref: "#/components/schemas/bulk-item-error"
+ list-federation-groups-item-response:
+ type: object
+ properties:
+ federationGroupId:
+ type: string
+ description: Internal system federation group identifier
+ example: company-federation-group1
+ federationGroupName:
+ type: string
+ description: Out facing customer display name
+ example: federationGroup
+ activeExternalNetworks:
+ type: array
+ description: List of activated external network for the federation group
+ items:
+ type: string
+ description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
+ example: WHATSAPP
+ list-federation-groups-response:
+ type: object
+ properties:
+ federationGroups:
+ type: array
+ items:
+ $ref: '#/components/schemas/list-federation-groups-item-response'
+ pagination:
+ $ref: '#/components/schemas/pagination'
+ bulk-update-federation-group-item-request:
+ type: object
+ required:
+ - externalNetwork
+ - symphonyId
+ properties:
+ symphonyId:
+ type: string
+ example: 123456789
+ externalNetwork:
+ type: string
+ description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
+ example: WHATSAPP
+ federationGroupId:
+ type: string
+ example: company-federation-group1
+ bulk-update-federation-group-request:
+ type: object
+ properties:
+ request:
+ type: array
+ items:
+ $ref: '#/components/schemas/bulk-update-federation-group-item-request'
+ minItems: 1
+ maxItems: 100
+ example:
+ request:
+ - symphonyId: 1234512345
+ externalNetwork: WHATSAPP
+ federationGroupId: company-federation-group1
+ - symphonyId: 1357913579
+ externalNetwork: WHATSAPP
+ federationGroupId: company-federation-group2
+ update-federation-group-request:
+ type: object
+ required:
+ - federationGroupId
+ properties:
+ federationGroupId:
+ type: string
+ example: company-federation-group1
+ moveToDefault:
+ type: boolean
+ update-federation-group-response:
+ type: object
+ properties:
+ symphonyId:
+ type: string
+ example: 123456789
+ federationGroupId:
+ type: string
+ example: company-federation-group1
+ externalNetwork:
+ type: string
+ example: WHATSAPP
+ bulk-update-federation-group-item-response:
+ type: object
+ properties:
+ status:
+ type: integer
+ response:
+ $ref: '#/components/schemas/update-federation-group-response'
+ error:
+ $ref: '#/components/schemas/bulk-item-error'
+
+ update-contact-response:
+ type: object
+ properties:
+ blocked:
+ $ref: '#/components/schemas/block-contact-information'
+ update-contact-request:
+ type: object
+ properties:
+ blocked:
+ $ref: '#/components/schemas/block-contact-information'
+ block-contact-information:
+ type: object
+ properties:
+ reason:
+ type: string
+ comment:
+ type: string
+ updateDate:
+ type: string
+ format: date-time
+
+ bulk-update-federation-group-response:
+ type: object
+ properties:
+ responses:
+ type: array
+ items:
+ $ref: '#/components/schemas/bulk-update-federation-group-item-response'
+ room-set-federation-group-request:
+ type: object
+ properties:
+ federationGroupId:
+ type: string
+ example: 123456789
+ moveToDefault:
+ type: boolean
+ example: true
+ rfc-error:
+ type: object
+ properties:
+ type:
+ type: string
+ description: |
+ An absolute URI that identifies the problem type. When dereferenced,
+ it SHOULD provide human-readable documentation for the problem type
+ (e.g., using HTML).
+ format: uri
+ example: "https://zalando.github.io/problem/constraint-violation"
+ default: "about:blank"
+ title:
+ type: string
+ description: |
+ A short, summary of the problem type. Written in English and readable
+ for engineers (usually not suited for non technical stakeholders and
+ not localized); example: Service Unavailable
+ status:
+ maximum: 600
+ exclusiveMaximum: true
+ minimum: 100
+ type: integer
+ description: |
+ The HTTP status code generated by the origin server for this occurrence
+ of the problem.
+ format: int32
+ example: 503
+ detail:
+ type: string
+ description: |
+ A human readable explanation specific to this occurrence of the
+ problem.
+ example: Connection to database timed out
+ instance:
+ type: string
+ description: |
+ An absolute URI that identifies the specific occurrence of the problem.
+ It may or may not yield further information if dereferenced.
+ format: uri
+ companies-search-response:
+ type: object
+ properties:
+ companies:
+ type: array
+ items:
+ $ref: "#/components/schemas/company-response"
+ company-response:
+ type: object
+ properties:
+ companyName:
+ type: string
+ example: symphony
+ pagination:
+ title: Pagination
+ type: object
+ properties:
+ previous:
+ type: string
+ format: uri
+ example: "?before=ewogICJlbWFpbEFkZHJlc3MiOiB7CiAgICAicyI6ICJtb2NrLnVzZXJAbW9jay5jb20iCiAgfQp9"
+ next:
+ type: string
+ format: uri
+ example: "?after=ewogICJlbWFpbEFkZHJlc3MiOiB7CiAgICAicyI6ICJtb2NrLnVzZXJAbW9jay5jb20iCiAgfQp9"
+ cursors:
+ $ref: "#/components/schemas/cursors"
+ cursors:
+ title: Cursors
+ type: object
+ properties:
+ before:
+ type: string
+ example: ewogICJlbWFpbEFkZHJlc3MiOiB7CiAgICAicyI6ICJtb2NrLnVzZXJAbW9jay5jb20iCiAgfQp9
+ after:
+ type: string
+ example: ewogICJlbWFpbEFkZHJlc3MiOiB7CiAgICAicyI6ICJtb2NrLnVzZXJAbW9jay5jb20iCiAgfQp9
+ bulk-removal-status:
+ type: string
+ enum:
+ - FAILURE
+ - SUCCESS
+ bulk-removal-statusv2:
+ type: string
+ enum:
+ - FAILURE
+ - SUCCESS
+ - NOT_FOUND
+ bulk-item-error:
+ type: object
+ properties:
+ itemId:
+ type: string
+ description: Context dependent identifier of the item
+ type:
+ type: string
+ description: |
+ An absolute URI that identifies the problem type. When dereferenced,
+ it SHOULD provide human-readable documentation for the problem type
+ (e.g., using HTML).
+ format: uri
+ example: "https://zalando.github.io/problem/constraint-violation"
+ default: "about:blank"
+ title:
+ type: string
+ description: |
+ A short, summary of the problem type. Written in English and readable
+ for engineers (usually not suited for non technical stakeholders and
+ not localized); example: Service Unavailable
+ statusCode:
+ maximum: 600
+ exclusiveMaximum: true
+ minimum: 100
+ type: integer
+ description: |
+ The HTTP status code generated by the origin server for this occurrence
+ of the problem.
+ format: int32
+ example: 503
+ detail:
+ type: string
+ description: |
+ A human readable explanation specific to this occurrence of the
+ problem.
+ example: Connection to database timed out
+ instance:
+ type: string
+ description: |
+ An absolute URI that identifies the specific occurrence of the problem.
+ It may or may not yield further information if dereferenced.
+ format: uri
+ # TODO
+ # use map instead of object
+ # but readme.io does not support maps
+ parameters:
+ type: object
+ properties:
+ additionalProp1:
+ type: "string"
+ additionalProp2:
+ type: "string"
+ additionalProp3:
+ type: "string"
+ contact-request:
+ required:
+ - externalNetwork
+ - firstName
+ - lastName
+ - phoneNumber
+ type: object
+ properties:
+ firstName:
+ type: string
+ example: John
+ lastName:
+ type: string
+ example: Doe
+ companyName:
+ type: string
+ example: Company
+ description: For SMS, LINE, WHATSAPP and WECHAT, the companyName is mandatory
+ maxLength: 100
+ emailAddress:
+ type: string
+ format: email
+ example: johndoe@symphony.com
+ description: For SMS, LINE, WHATSAPP and WECHAT, the emailAddress is mandatory
+ phoneNumber:
+ type: string
+ format: phone
+ example: 911234567890
+ externalNetwork:
+ description: "External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE"
+ type: string
+ example: WHATSAPP
+ advisorSymphonyIds:
+ type: array
+ description: A list of Symphony user IDs of the advisors to add the contact to.
+ items:
+ pattern: ^\d+$
+ type: number
+ example: 14362370637825
+ preferredLanguage:
+ type: string
+ description: Contact preferred language code
+ example: CHINESE_CHN, CHINESE_HKG, CHINESE_TAI, JAPANESE (among others, see release note for more)
+ update-contacts-request:
+ required:
+ - companyName
+ - phoneNumber
+ - externalNetwork
+ - firstName
+ - lastName
+ type: object
+ properties:
+ firstName:
+ type: string
+ example: John
+ lastName:
+ type: string
+ example: DoeABC
+ companyName:
+ type: string
+ example: Company
+ maxLength: 100
+ phoneNumber:
+ type: string
+ format: phone
+ example: 911234567890
+ externalNetwork:
+ type: string
+ example: WHATSAPP
+ description: WHATSAPP
+ number-response:
+ type: object
+ required:
+ - phoneNumber
+ properties:
+ phoneNumber:
+ type: string
+ example: 911234567890
+ subNetwork:
+ type: string
+ country:
+ type: string
+ carrier:
+ type: string
+ provider:
+ type: string
+ status:
+ type: string
+ address:
+ $ref: '#/components/schemas/address-response'
+ assignedTo:
+ $ref: '#/components/schemas/assigned-to'
+ phone-numbers-details-response:
+ type: object
+ properties:
+ numbers:
+ type: array
+ items:
+ $ref: '#/components/schemas/phone-number-info'
+ update-number-request:
+ type: object
+ properties:
+ assignedTo:
+ $ref: '#/components/schemas/assigned-to-request'
+ assigned-to-request:
+ type: object
+ properties:
+ advisorSymphonyId:
+ type: string
+ example: 911234567890
+ description: |
+ The Symphony identifier of the advisor to assign this resource to, or empty string to unassign.
+ address-response:
+ type: object
+ properties:
+ property:
+ type: string
+ example: Symphony
+ line1:
+ type: string
+ example: 980 Avenue de Roumanille
+ line2:
+ type: string
+ example: Le Fairway, Bâtiment A
+ city:
+ type: string
+ example: Biot
+ state:
+ type: string
+ example: France
+ zip:
+ type: string
+ example: 06410
+ zipPlusFour:
+ type: string
+ example: 06410
+ address-request:
+ type: object
+ properties:
+ property:
+ type: string
+ example: Symphony
+ line1:
+ type: string
+ example: 980 Avenue de Roumanille
+ line2:
+ type: string
+ example: Le Fairway, Bâtiment A
+ city:
+ type: string
+ example: Biot
+ state:
+ type: string
+ example: France
+ zip:
+ type: string
+ example: 06410
+ zipPlusFour:
+ type: string
+ example: 06410
+ federation-group-emp-forbidden:
+ type: object
+ description: Access is denied, you don't have the permission to perform this operation
+ properties:
+ type:
+ type: string
+ format: federation.group.external.network.forbidden
+ title:
+ type: string
+ example: The external network is not activated for federation group federation-group-id
+ status:
+ type: integer
+ format: "403"
+ not-applicable-for-external-network:
+ type: object
+ description: 'Not Applicable for the given external network.'
+ properties:
+ type:
+ type: string
+ format: 'not.applicable.for.external.network'
+ title:
+ type: string
+ format: 'Not Applicable for the given external network.'
+ status:
+ type: integer
+ format: "406"
+ federation-group-not-found:
+ type: object
+ properties:
+ type:
+ type: string
+ format: federation.group.not.found
+ title:
+ type: string
+ format: Federation group not found.
+ status:
+ type: integer
+ format: "404"
+ description: Federation group not found
+
+ tenant-not-found:
+ type: object
+ description: 'Tenant not found'
+ properties:
+ type:
+ type: string
+ format: 'tenant.not.found'
+ title:
+ type: string
+ format: 'Tenant not found'
+ status:
+ type: integer
+ format: "404"
+ room-update-federation-group-errors:
+ type: object
+ properties:
+ type:
+ type: string
+ example: room.update.failed
+ title:
+ type: string
+ example: room update failed
+ status:
+ type: integer
+ example: 409
+ errors:
+ type: array
+ items:
+ type: object
+ properties:
+ symphonyId:
+ type: string
+ example: 123456789
+ reason:
+ type: string
+ description: External network specific error related to each room channel
+ example: Could not allocate new phone number for the customer.
+ errorCode:
+ type: string
+ description: External network specific error code
+ example: no.business.api.available
+ preferred-language-not-supported:
+ type: object
+ description: Preferred language not supported.
+ properties:
+ type:
+ type: string
+ format: preferred.language.not.supported
+ title:
+ type: string
+ format: Preferred language not supported.
+ status:
+ type: integer
+ format: "400"
+ resend-invite-response:
+ type: object
+ properties:
+ invitationCode:
+ type: string
+ example: "AB12DE43"
+ invite-already-confirmed:
+ type: object
+ description: 'Invite is already confirmed.'
+ properties:
+ type:
+ type: string
+ format: 'invite.already.confirmed'
+ title:
+ type: string
+ format: 'Invite is already confirmed.'
+ status:
+ type: integer
+ format: "400"
+ invites-not-configured-on-emp:
+ type: object
+ description: 'Invites not configured on EMP'
+ properties:
+ type:
+ type: string
+ format: 'invites.not.configured.on.emp'
+ title:
+ type: string
+ format: 'Invites not configured on Emp.'
+ status:
+ type: integer
+ format: "400"
+ resend-invite-failed:
+ type: object
+ description: 'Invite resend failed.'
+ properties:
+ type:
+ type: string
+ format: 'resend.invite.failed'
+ title:
+ type: string
+ format: 'Resend invite failed.'
+ status:
+ type: integer
+ format: "500"
+ copy-contact-response:
+ type: object
+ properties:
+ newSymphonyId:
+ type: string
+ description: Symphony user ID of the account copy
+ example: 12345678912365
+ migratedStreamIds:
+ type: array
+ description: StreamIds of the rooms in which the user's account has been replaced with the account copy.
+ items:
+ type: string
+ user-copy-not-supported-for-network:
+ type: object
+ properties:
+ type:
+ type: string
+ format: user.copy.not.supported.for.network
+ title:
+ type: string
+ format: user copy not supported for the external network
+ status:
+ type: integer
+ format: "400"
+ description: |
+ Contact copy is not supported for the external network of the contact. Contact copy is supported only for WHATSAPP and SMS.
+ current-tenant-has-own-user-copy:
+ type: object
+ properties:
+ type:
+ type: string
+ format: current.tenant.has.own.user.copy
+ title:
+ type: string
+ format: Current tenant has already its own copy for user.
+ status:
+ type: integer
+ format: "409"
+ description: Tenant requesting the contact copy already has its own copy of the contact. The copy contact action is not required.
+ user-copy-not-supported-for-ims:
+ type: object
+ properties:
+ type:
+ type: string
+ format: user.copy.not.own.supported.for.ims
+ title:
+ type: string
+ format: User copy is not supported for user having IMs
+ status:
+ type: integer
+ format: "403"
+ description: Contact copy is not supported for users who are part of IMs. These IMs need to be removed first.
+ copy-contact-failed:
+ type: object
+ description: 'Unable to copy the contact.'
+ properties:
+ type:
+ type: string
+ format: 'account.copy.failed'
+ title:
+ type: string
+ format: 'Unable to copy the account.'
+ status:
+ type: integer
+ format: "500"
+ number-not-found:
+ type: object
+ description: 'Number not found'
+ properties:
+ type:
+ type: string
+ format: 'number.not.found'
+ title:
+ type: string
+ format: 'Number not found'
+ status:
+ type: integer
+ format: "404"
+ no-numbers-found:
+ type: object
+ description: 'No numbers found'
+ properties:
+ type:
+ type: string
+ format: 'no.numbers.found'
+ title:
+ type: string
+ format: 'No numbers found'
+ status:
+ type: integer
+ format: "404"
+ address-already-empty:
+ type: object
+ description: 'Address already empty'
+ properties:
+ type:
+ type: string
+ format: 'address.already.empty'
+ title:
+ type: string
+ format: 'Address already empty'
+ status:
+ type: integer
+ format: "400"
+ no-field-updated:
+ type: object
+ description: 'No field updated'
+ properties:
+ type:
+ type: string
+ format: 'no.field.updated'
+ title:
+ type: string
+ format: 'No field updated'
+ status:
+ type: integer
+ format: "400"
+
+ advisor-already-has-phone-allocated-problem:
+ type: object
+ description: 'The advisor already has an allocated phone number.'
+ properties:
+ type:
+ type: string
+ format: 'advisor.already.has.phone.allocated'
+ title:
+ type: string
+ format: 'The advisor already has an allocated phone number.'
+ status:
+ type: integer
+ format: "409"
+ phone-number-already-allocated-problem:
+ type: object
+ description: 'The phone number is already allocated.'
+ properties:
+ type:
+ type: string
+ format: 'phone.already.allocated'
+ title:
+ type: string
+ format: 'The phone number is already allocated.'
+ status:
+ type: integer
+ format: "409"
+ phone-number-pre-allocation-not-supported-problem:
+ description: 'Phone number pre-allocation is not supported for this external network.'
+ properties:
+ type:
+ type: string
+ format: 'phone.number.pre.allocation.not.supported'
+ title:
+ type: string
+ format: 'Phone number pre-allocation is not supported.'
+ status:
+ type: integer
+ format: "400"
+ pre-entitlement-failed:
+ type: object
+ description: 'Pre-entitlement failed.'
+ properties:
+ type:
+ type: string
+ format: 'pre.entitlement.failed'
+ title:
+ type: string
+ format: 'Pre-entitlement failed.'
+ status:
+ type: integer
+ format: "500"
+ pre-entitlement-not-found:
+ type: object
+ description: 'Pre-entitlement not found'
+ properties:
+ type:
+ type: string
+ format: 'pre.entitlement.not.found'
+ title:
+ type: string
+ format: 'Pre-entitlement not found'
+ status:
+ type: integer
+ format: "404"
+
+ advisor-already-entitled:
+ type: object
+ description: 'Advisor already entitled'
+ properties:
+ type:
+ type: string
+ format: 'advisor.already.entitled'
+ title:
+ type: string
+ format: 'Advisor already entitled'
+ status:
+ type: integer
+ format: "403"
+
+ advisor-already-entitled-for-direct-emp:
+ type: object
+ description: Advisor is already entitled to another direct EMP
+ properties:
+ type:
+ type: string
+ format: advisor.already.entitled.for.direct.emp
+ title:
+ type: string
+ format: The advisor for which the number is reassigned must not be entitled on a direct EMP
+ status:
+ type: integer
+ format: "403"
+
+ advisor-still-entitled:
+ type: object
+ description: |
+ Returned when the advisor associated with the phone number is still entitled to a direct EMP.
+ properties:
+ type:
+ type: string
+ format: 'advisor.still.entitled'
+ title:
+ type: string
+ format: An advisor is still entitled to a Direct EMP with this phone number
+ status:
+ type: integer
+ format: "403"
+
+ customer-block-phone-numbers-request:
+ type: object
+ required:
+ - phoneNumbers
+ properties:
+ phoneNumbers:
+ type: array
+ items:
+ $ref: '#/components/schemas/customer-block-phone-numbers-item-request'
+ minItems: 1
+ maxItems: 100
+
+ customer-unblock-phone-numbers-request:
+ type: object
+ required:
+ - phoneNumbers
+ properties:
+ phoneNumbers:
+ type: string
+ format: phone
+
+ customer-block-phone-numbers-item-request:
+ type: object
+ required:
+ - phoneNumber
+ - reason
+ properties:
+ phoneNumber:
+ type: string
+ format: phone
+ reason:
+ $ref: '#/components/schemas/blocking-reason-enum'
+ comment:
+ type: string
+
+
+ get-blocked-phone-numbers-response:
+ type: object
+ properties:
+ phoneNumbers:
+ type: array
+ items:
+ $ref: '#/components/schemas/get-blocked-phone-numbers-item'
+
+ get-blocked-phone-numbers-item:
+ type: object
+ properties:
+ phoneNumber:
+ type: string
+ format: phone
+ reason:
+ $ref: '#/components/schemas/blocking-reason-enum'
+ comment:
+ type: string
+
+ blocking-reason-enum:
+ type: string
+ enum:
+ - SPAM
+ - ABUSE
+ - COMPLIANCE
+ - OTHER
+
+ # Responses
+ customer-block-phone-numbers-response:
+ type: object
+ properties:
+ phoneNumbers:
+ type: array
+ items:
+ $ref: '#/components/schemas/customer-block-phone-numbers-item-response'
+
+ customer-block-phone-numbers-item-response:
+ type: object
+ properties:
+ phoneNumber:
+ type: string
+ status:
+ type: integer
+ error:
+ $ref: '#/components/schemas/bulk-item-error'
+
+ not-entitled-on-direct-emp:
+ type: object
+ description: 'Not Entitled on direct emp.'
+ properties:
+ type:
+ type: string
+ format: 'not.entitled.on.direct.emp'
+ title:
+ type: string
+ format: 'Not Entitled on direct emp.'
+ status:
+ type: integer
+ format: "403"
+
+ phone-number-not-found:
+ type: object
+ description: 'Phone number not found'
+ properties:
+ type:
+ type: string
+ format: 'phone.number.not.found'
+ title:
+ type: string
+ format: 'Phone number not found'
+ status:
+ type: integer
+ format: "404"
+
+ subnetwork-not-implemented:
+ type: object
+ description: 'Subnetwork not implemented.'
+ properties:
+ type:
+ type: string
+ format: 'subnetwork.not.implemented'
+ title:
+ type: string
+ format: 'subnetwork not implemented.'
+ status:
+ type: integer
+ format: "501"
+
+ inline_response_400:
+ oneOf:
+ - $ref: "#/components/schemas/entitlement-user-already-exists-problem"
+ - $ref: "#/components/schemas/symphony-user-not-found-problem"
+ - $ref: "#/components/schemas/entitlement-type-not-found-problem"
+ - $ref: "#/components/schemas/advisor-id-not-provided"
+ inline_response_404_1:
+ oneOf:
+ - $ref: "#/components/schemas/advisor-not-found"
+ - $ref: "#/components/schemas/contact-not-found"
+ inline_response_404_2:
+ oneOf:
+ - $ref: "#/components/schemas/tenant-configuration-not-found"
+ - $ref: "#/components/schemas/advisor-not-found"
+ - $ref: "#/components/schemas/permission-not-found"
+ inline_response_404_3:
+ oneOf:
+ - $ref: "#/components/schemas/advisor-not-found"
+ - $ref: "#/components/schemas/permission-not-found"
+ inline_response_400_1:
+ oneOf:
+ - $ref: "#/components/schemas/external-network-not-found"
+ - $ref: "#/components/schemas/invalid-user-info"
+ inline_response_403:
+ oneOf:
+ - $ref: "#/components/schemas/forbidden-advisor"
+ - $ref: "#/components/schemas/forbidden-onboarder"
+ - $ref: "#/components/schemas/forbidden-entitlement-type"
+ inline_response_409:
+ oneOf:
+ - $ref: "#/components/schemas/user-already-onboarded"
+ - $ref: "#/components/schemas/user-already-exists"
+ inline_response_409_1:
+ oneOf:
+ - $ref: "#/components/schemas/user-already-onboarded"
+ inline_response_403_1:
+ oneOf:
+ - $ref: "#/components/schemas/forbidden-entitlement-type"
+ - $ref: "#/components/schemas/update-forbidden-for-advisor"
+ - $ref: "#/components/schemas/update-forbidden-for-contact"
+ - $ref: "#/components/schemas/multi-tenant-federated-user-update-attempt"
+ inline_response_404_4:
+ oneOf:
+ - $ref: "#/components/schemas/tenant-configuration-not-found"
+ - $ref: "#/components/schemas/contact-not-found"
+ - $ref: "#/components/schemas/advisor-not-found"
+ inline_response_404_5:
+ oneOf:
+ - $ref: "#/components/schemas/advisor-not-found"
+ inline_response_401:
+ oneOf:
+ - $ref: "#/components/schemas/Unauthorized"
+ inline_response_403_0:
+ oneOf:
+ - $ref: "#/components/schemas/Forbidden"
+ inline_response_404_6:
+ oneOf:
+ - $ref: "#/components/schemas/contact-not-found"
+ inline_response_400_2:
+ oneOf:
+ - $ref: "#/components/schemas/connection-not-accepted"
+ inline_response_403_2:
+ oneOf:
+ - $ref: "#/components/schemas/forbidden-advisor"
+ - $ref: "#/components/schemas/forbidden-entitlement-type"
+ inline_response_404_7:
+ oneOf:
+ - $ref: "#/components/schemas/tenant-configuration-not-found"
+ - $ref: "#/components/schemas/advisor-not-found"
+ - $ref: "#/components/schemas/federated-account-not-found"
+ - $ref: "#/components/schemas/contact-not-found"
+ inline_response_500:
+ oneOf:
+ - $ref: "#/components/schemas/create-room-failed"
+ - $ref: "#/components/schemas/missing-connection-with-connect-bot"
+ inline_response_403_3:
+ oneOf:
+ - $ref: "#/components/schemas/forbidden-advisor"
+ - $ref: "#/components/schemas/remove-room-member-forbidden"
+ - $ref: "#/components/schemas/forbidden-entitlement-type"
+ inline_response_404_8:
+ oneOf:
+ - $ref: "#/components/schemas/room-not-found"
+ - $ref: "#/components/schemas/room-member-not-found"
+ - $ref: "#/components/schemas/advisor-not-found"
+ - $ref: "#/components/schemas/tenant-configuration-not-found"
+ inline_response_400_3:
+ oneOf:
+ - $ref: "#/components/schemas/multi-external-network-room-not-supported"
+ - $ref: "#/components/schemas/multi-company-room-not-supported"
+ inline_response_404_9:
+ oneOf:
+ - $ref: "#/components/schemas/tenant-configuration-not-found"
+ - $ref: "#/components/schemas/advisor-not-found"
+ - $ref: "#/components/schemas/room-not-found"
+
+ securitySchemes:
+ sfsAuthentication:
+ type: http
+ scheme: bearer
+ bearerFormat: JWT
+ description: HTTP header
+security:
+ - sfsAuthentication: []
diff --git a/symphony/bdk/gen/federation_api/companies_api.py b/symphony/bdk/gen/federation_api/companies_api.py
new file mode 100644
index 00000000..152dfc15
--- /dev/null
+++ b/symphony/bdk/gen/federation_api/companies_api.py
@@ -0,0 +1,307 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+import warnings
+from pydantic import validate_call, Field, StrictFloat, StrictStr, StrictInt
+from typing import Any, Dict, List, Optional, Tuple, Union
+from typing_extensions import Annotated
+
+from pydantic import Field
+from typing_extensions import Annotated
+from symphony.bdk.gen.federation_model.companies_search_response import CompaniesSearchResponse
+
+from symphony.bdk.gen.api_client import ApiClient, RequestSerialized
+from symphony.bdk.gen.api_response import ApiResponse
+from symphony.bdk.gen.rest import RESTResponseType
+
+
+class CompaniesApi:
+ """NOTE: This class is auto generated by OpenAPI Generator
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+ """
+
+ def __init__(self, api_client=None) -> None:
+ if api_client is None:
+ api_client = ApiClient.get_default()
+ self.api_client = api_client
+
+
+ @validate_call
+ async def search_companies(
+ self,
+ query: Annotated[str, Field(min_length=3, strict=True, description="Start of the company's name to match")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> CompaniesSearchResponse:
+ """Search for companies
+
+ Search for companies by name.
Note: The WeChat or WhatsApp or SMS or SMS Direct or LINE onboarding applications do not enforce consistency for company names.
+
+ :param query: Start of the company's name to match (required)
+ :type query: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._search_companies_serialize(
+ query=query,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "CompaniesSearchResponse",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ ).data
+
+
+ @validate_call
+ async def search_companies_with_http_info(
+ self,
+ query: Annotated[str, Field(min_length=3, strict=True, description="Start of the company's name to match")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> ApiResponse[CompaniesSearchResponse]:
+ """Search for companies
+
+ Search for companies by name.
Note: The WeChat or WhatsApp or SMS or SMS Direct or LINE onboarding applications do not enforce consistency for company names.
+
+ :param query: Start of the company's name to match (required)
+ :type query: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._search_companies_serialize(
+ query=query,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "CompaniesSearchResponse",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ )
+
+
+ @validate_call
+ async def search_companies_without_preload_content(
+ self,
+ query: Annotated[str, Field(min_length=3, strict=True, description="Start of the company's name to match")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RESTResponseType:
+ """Search for companies
+
+ Search for companies by name.
Note: The WeChat or WhatsApp or SMS or SMS Direct or LINE onboarding applications do not enforce consistency for company names.
+
+ :param query: Start of the company's name to match (required)
+ :type query: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._search_companies_serialize(
+ query=query,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "CompaniesSearchResponse",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ return response_data.response
+
+
+ def _search_companies_serialize(
+ self,
+ query,
+ _request_auth,
+ _content_type,
+ _headers,
+ _host_index,
+ ) -> RequestSerialized:
+
+ _host = None
+
+ _collection_formats: Dict[str, str] = {
+ }
+
+ _path_params: Dict[str, str] = {}
+ _query_params: List[Tuple[str, str]] = []
+ _header_params: Dict[str, Optional[str]] = _headers or {}
+ _form_params: List[Tuple[str, str]] = []
+ _files: Dict[
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
+ ] = {}
+ _body_params: Optional[bytes] = None
+
+ # process the path parameters
+ # process the query parameters
+ if query is not None:
+
+ _query_params.append(('query', query))
+
+ # process the header parameters
+ # process the form parameters
+ # process the body parameter
+
+
+ # set the HTTP header `Accept`
+ if 'Accept' not in _header_params:
+ _header_params['Accept'] = self.api_client.select_header_accept(
+ [
+ 'application/json'
+ ]
+ )
+
+
+ # authentication setting
+ _auth_settings: List[str] = [
+ 'sfsAuthentication'
+ ]
+
+ return self.api_client.param_serialize(
+ method='GET',
+ resource_path='/api/v1/customer/companies/search',
+ path_params=_path_params,
+ query_params=_query_params,
+ header_params=_header_params,
+ body=_body_params,
+ post_params=_form_params,
+ files=_files,
+ auth_settings=_auth_settings,
+ collection_formats=_collection_formats,
+ _host=_host,
+ _request_auth=_request_auth
+ )
+
+
diff --git a/symphony/bdk/gen/federation_api/contact_api.py b/symphony/bdk/gen/federation_api/contact_api.py
new file mode 100644
index 00000000..b1ca4956
--- /dev/null
+++ b/symphony/bdk/gen/federation_api/contact_api.py
@@ -0,0 +1,3484 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+import warnings
+from pydantic import validate_call, Field, StrictFloat, StrictStr, StrictInt
+from typing import Any, Dict, List, Optional, Tuple, Union
+from typing_extensions import Annotated
+
+from decimal import Decimal
+from pydantic import Field, StrictStr, field_validator
+from typing import Optional
+from typing_extensions import Annotated
+from symphony.bdk.gen.federation_model.add_contact_response import AddContactResponse
+from symphony.bdk.gen.federation_model.copy_contact_response import CopyContactResponse
+from symphony.bdk.gen.federation_model.customer_contact_request import CustomerContactRequest
+from symphony.bdk.gen.federation_model.customer_contacts_with_id_response import CustomerContactsWithIdResponse
+from symphony.bdk.gen.federation_model.customer_contacts_with_id_responsev2 import CustomerContactsWithIdResponsev2
+from symphony.bdk.gen.federation_model.customer_delete_advisor_contacts_responsev2 import CustomerDeleteAdvisorContactsResponsev2
+from symphony.bdk.gen.federation_model.customer_update_contacts_request import CustomerUpdateContactsRequest
+from symphony.bdk.gen.federation_model.customer_update_contacts_requestv2 import CustomerUpdateContactsRequestv2
+from symphony.bdk.gen.federation_model.delete_contacts_request import DeleteContactsRequest
+from symphony.bdk.gen.federation_model.delete_contacts_requestv2 import DeleteContactsRequestv2
+from symphony.bdk.gen.federation_model.delete_contacts_response import DeleteContactsResponse
+from symphony.bdk.gen.federation_model.delete_contacts_responsev2 import DeleteContactsResponsev2
+from symphony.bdk.gen.federation_model.update_contacts_response import UpdateContactsResponse
+from symphony.bdk.gen.federation_model.update_contacts_response_v2 import UpdateContactsResponseV2
+
+from symphony.bdk.gen.api_client import ApiClient, RequestSerialized
+from symphony.bdk.gen.api_response import ApiResponse
+from symphony.bdk.gen.rest import RESTResponseType
+
+
+class ContactApi:
+ """NOTE: This class is auto generated by OpenAPI Generator
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+ """
+
+ def __init__(self, api_client=None) -> None:
+ if api_client is None:
+ api_client = ApiClient.get_default()
+ self.api_client = api_client
+
+
+ @validate_call
+ async def add_contact(
+ self,
+ customer_contact_request: Optional[CustomerContactRequest] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> AddContactResponse:
+ """Add a contact and/or advisors to a contact (recommended)
+
+ Add a contact and/or advisor(s) to the contact.
This end point can be called in 2 situations:
- To create a contact and eventually immediately associate one or more advisors.
- To add more advisors to an existing contact.
In both cases, you must provide all the contact's mandatory fields listed as \"body params\".
**Note**
- If both advisorSymphonyId and advisorEmailAddresses are passed, the advisorSymphonyId will prevail.
+
+ :param customer_contact_request:
+ :type customer_contact_request: CustomerContactRequest
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._add_contact_serialize(
+ customer_contact_request=customer_contact_request,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "AddContactResponse",
+ '400': "InlineResponse4001",
+ '403': "AddContact403Response",
+ '401': "Unauthorized",
+ '404': "TenantConfigurationNotFound",
+ '409': "InlineResponse409",
+ '500': "CreateAccountFailed",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ ).data
+
+
+ @validate_call
+ async def add_contact_with_http_info(
+ self,
+ customer_contact_request: Optional[CustomerContactRequest] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> ApiResponse[AddContactResponse]:
+ """Add a contact and/or advisors to a contact (recommended)
+
+ Add a contact and/or advisor(s) to the contact.
This end point can be called in 2 situations:
- To create a contact and eventually immediately associate one or more advisors.
- To add more advisors to an existing contact.
In both cases, you must provide all the contact's mandatory fields listed as \"body params\".
**Note**
- If both advisorSymphonyId and advisorEmailAddresses are passed, the advisorSymphonyId will prevail.
+
+ :param customer_contact_request:
+ :type customer_contact_request: CustomerContactRequest
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._add_contact_serialize(
+ customer_contact_request=customer_contact_request,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "AddContactResponse",
+ '400': "InlineResponse4001",
+ '403': "AddContact403Response",
+ '401': "Unauthorized",
+ '404': "TenantConfigurationNotFound",
+ '409': "InlineResponse409",
+ '500': "CreateAccountFailed",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ )
+
+
+ @validate_call
+ async def add_contact_without_preload_content(
+ self,
+ customer_contact_request: Optional[CustomerContactRequest] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RESTResponseType:
+ """Add a contact and/or advisors to a contact (recommended)
+
+ Add a contact and/or advisor(s) to the contact.
This end point can be called in 2 situations:
- To create a contact and eventually immediately associate one or more advisors.
- To add more advisors to an existing contact.
In both cases, you must provide all the contact's mandatory fields listed as \"body params\".
**Note**
- If both advisorSymphonyId and advisorEmailAddresses are passed, the advisorSymphonyId will prevail.
+
+ :param customer_contact_request:
+ :type customer_contact_request: CustomerContactRequest
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._add_contact_serialize(
+ customer_contact_request=customer_contact_request,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "AddContactResponse",
+ '400': "InlineResponse4001",
+ '403': "AddContact403Response",
+ '401': "Unauthorized",
+ '404': "TenantConfigurationNotFound",
+ '409': "InlineResponse409",
+ '500': "CreateAccountFailed",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ return response_data.response
+
+
+ def _add_contact_serialize(
+ self,
+ customer_contact_request,
+ _request_auth,
+ _content_type,
+ _headers,
+ _host_index,
+ ) -> RequestSerialized:
+
+ _host = None
+
+ _collection_formats: Dict[str, str] = {
+ }
+
+ _path_params: Dict[str, str] = {}
+ _query_params: List[Tuple[str, str]] = []
+ _header_params: Dict[str, Optional[str]] = _headers or {}
+ _form_params: List[Tuple[str, str]] = []
+ _files: Dict[
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
+ ] = {}
+ _body_params: Optional[bytes] = None
+
+ # process the path parameters
+ # process the query parameters
+ # process the header parameters
+ # process the form parameters
+ # process the body parameter
+ if customer_contact_request is not None:
+ _body_params = customer_contact_request
+
+
+ # set the HTTP header `Accept`
+ if 'Accept' not in _header_params:
+ _header_params['Accept'] = self.api_client.select_header_accept(
+ [
+ 'application/json'
+ ]
+ )
+
+ # set the HTTP header `Content-Type`
+ if _content_type:
+ _header_params['Content-Type'] = _content_type
+ else:
+ _default_content_type = (
+ self.api_client.select_header_content_type(
+ [
+ 'application/json'
+ ]
+ )
+ )
+ if _default_content_type is not None:
+ _header_params['Content-Type'] = _default_content_type
+
+ # authentication setting
+ _auth_settings: List[str] = [
+ 'sfsAuthentication'
+ ]
+
+ return self.api_client.param_serialize(
+ method='POST',
+ resource_path='/api/v2/customer/contacts',
+ path_params=_path_params,
+ query_params=_query_params,
+ header_params=_header_params,
+ body=_body_params,
+ post_params=_form_params,
+ files=_files,
+ auth_settings=_auth_settings,
+ collection_formats=_collection_formats,
+ _host=_host,
+ _request_auth=_request_auth
+ )
+
+
+
+
+ @validate_call
+ async def copy_contact(
+ self,
+ contact_symphony_id: Annotated[str, Field(strict=True, description="Contact's Symphony ID")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> CopyContactResponse:
+ """Copy contact
+
+ Create a new contact copy.
Some contacts might be shared between tenants. Shared contacts updates are not allowed.
This API allows to create a contact copy that is dedicated for the requesting tenant and that can be updated.
Contacts that are created starting from the 23.03 release are already not shared between tenants. This API is dedicated for shared contacts created prior to the 23.03 release.
Please note: - A new account is created for the user, with a new Symphony user ID.
- There is no change in the user's data.
- The original user account is removed from all rooms and the new account is added to these rooms. Then, a system message is pushed to each room: Maintenance completed on account: {contact first name} {contact last name}. No action on your part is required.
- The email format of the user will appear differently in Content Export. Old format: {network}.{phone}@symphony.com. New format: {network}.{phone}.{tenantId}@symphony.com
- This API is only supported for WHATSAPP and SMS contacts.
- Users who are still part of Symphony IMs cannot be copied. IMs should be first removed from Federation Services.
- The copy action is not required for users onboarded by a single tenant before the 23.03 release, or for all users onboarded after 23.03 release.
+
+ :param contact_symphony_id: Contact's Symphony ID (required)
+ :type contact_symphony_id: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._copy_contact_serialize(
+ contact_symphony_id=contact_symphony_id,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "CopyContactResponse",
+ '400': "UserCopyNotSupportedForNetwork",
+ '403': "CopyContact403Response",
+ '404': "ContactNotFound",
+ '409': "CurrentTenantHasOwnUserCopy",
+ '500': "CopyContactFailed",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ ).data
+
+
+ @validate_call
+ async def copy_contact_with_http_info(
+ self,
+ contact_symphony_id: Annotated[str, Field(strict=True, description="Contact's Symphony ID")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> ApiResponse[CopyContactResponse]:
+ """Copy contact
+
+ Create a new contact copy.
Some contacts might be shared between tenants. Shared contacts updates are not allowed.
This API allows to create a contact copy that is dedicated for the requesting tenant and that can be updated.
Contacts that are created starting from the 23.03 release are already not shared between tenants. This API is dedicated for shared contacts created prior to the 23.03 release.
Please note: - A new account is created for the user, with a new Symphony user ID.
- There is no change in the user's data.
- The original user account is removed from all rooms and the new account is added to these rooms. Then, a system message is pushed to each room: Maintenance completed on account: {contact first name} {contact last name}. No action on your part is required.
- The email format of the user will appear differently in Content Export. Old format: {network}.{phone}@symphony.com. New format: {network}.{phone}.{tenantId}@symphony.com
- This API is only supported for WHATSAPP and SMS contacts.
- Users who are still part of Symphony IMs cannot be copied. IMs should be first removed from Federation Services.
- The copy action is not required for users onboarded by a single tenant before the 23.03 release, or for all users onboarded after 23.03 release.
+
+ :param contact_symphony_id: Contact's Symphony ID (required)
+ :type contact_symphony_id: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._copy_contact_serialize(
+ contact_symphony_id=contact_symphony_id,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "CopyContactResponse",
+ '400': "UserCopyNotSupportedForNetwork",
+ '403': "CopyContact403Response",
+ '404': "ContactNotFound",
+ '409': "CurrentTenantHasOwnUserCopy",
+ '500': "CopyContactFailed",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ )
+
+
+ @validate_call
+ async def copy_contact_without_preload_content(
+ self,
+ contact_symphony_id: Annotated[str, Field(strict=True, description="Contact's Symphony ID")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RESTResponseType:
+ """Copy contact
+
+ Create a new contact copy.
Some contacts might be shared between tenants. Shared contacts updates are not allowed.
This API allows to create a contact copy that is dedicated for the requesting tenant and that can be updated.
Contacts that are created starting from the 23.03 release are already not shared between tenants. This API is dedicated for shared contacts created prior to the 23.03 release.
Please note: - A new account is created for the user, with a new Symphony user ID.
- There is no change in the user's data.
- The original user account is removed from all rooms and the new account is added to these rooms. Then, a system message is pushed to each room: Maintenance completed on account: {contact first name} {contact last name}. No action on your part is required.
- The email format of the user will appear differently in Content Export. Old format: {network}.{phone}@symphony.com. New format: {network}.{phone}.{tenantId}@symphony.com
- This API is only supported for WHATSAPP and SMS contacts.
- Users who are still part of Symphony IMs cannot be copied. IMs should be first removed from Federation Services.
- The copy action is not required for users onboarded by a single tenant before the 23.03 release, or for all users onboarded after 23.03 release.
+
+ :param contact_symphony_id: Contact's Symphony ID (required)
+ :type contact_symphony_id: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._copy_contact_serialize(
+ contact_symphony_id=contact_symphony_id,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "CopyContactResponse",
+ '400': "UserCopyNotSupportedForNetwork",
+ '403': "CopyContact403Response",
+ '404': "ContactNotFound",
+ '409': "CurrentTenantHasOwnUserCopy",
+ '500': "CopyContactFailed",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ return response_data.response
+
+
+ def _copy_contact_serialize(
+ self,
+ contact_symphony_id,
+ _request_auth,
+ _content_type,
+ _headers,
+ _host_index,
+ ) -> RequestSerialized:
+
+ _host = None
+
+ _collection_formats: Dict[str, str] = {
+ }
+
+ _path_params: Dict[str, str] = {}
+ _query_params: List[Tuple[str, str]] = []
+ _header_params: Dict[str, Optional[str]] = _headers or {}
+ _form_params: List[Tuple[str, str]] = []
+ _files: Dict[
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
+ ] = {}
+ _body_params: Optional[bytes] = None
+
+ # process the path parameters
+ if contact_symphony_id is not None:
+ _path_params['contactSymphonyId'] = contact_symphony_id
+ # process the query parameters
+ # process the header parameters
+ # process the form parameters
+ # process the body parameter
+
+
+ # set the HTTP header `Accept`
+ if 'Accept' not in _header_params:
+ _header_params['Accept'] = self.api_client.select_header_accept(
+ [
+ 'application/json'
+ ]
+ )
+
+
+ # authentication setting
+ _auth_settings: List[str] = [
+ 'sfsAuthentication'
+ ]
+
+ return self.api_client.param_serialize(
+ method='POST',
+ resource_path='/api/v1/customer/contacts/{contactSymphonyId}/copy',
+ path_params=_path_params,
+ query_params=_query_params,
+ header_params=_header_params,
+ body=_body_params,
+ post_params=_form_params,
+ files=_files,
+ auth_settings=_auth_settings,
+ collection_formats=_collection_formats,
+ _host=_host,
+ _request_auth=_request_auth
+ )
+
+
+
+
+ @validate_call
+ async def delete_advisor_contacts(
+ self,
+ advisor_email_address: Annotated[StrictStr, Field(description="Advisor's email address")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> DeleteContactsResponse:
+ """(Deprecated) Removes all contacts of a given advisor (deprecated)
+
+ Removes all the contacts of an advisor matching the advisor's email address.
+
+ :param advisor_email_address: Advisor's email address (required)
+ :type advisor_email_address: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+ warnings.warn("DELETE /api/v1/customer/contacts/advisorEmailAddress/{advisorEmailAddress} is deprecated.", DeprecationWarning)
+
+ _param = self._delete_advisor_contacts_serialize(
+ advisor_email_address=advisor_email_address,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "DeleteContactsResponse",
+ '404': "InlineResponse4041",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ ).data
+
+
+ @validate_call
+ async def delete_advisor_contacts_with_http_info(
+ self,
+ advisor_email_address: Annotated[StrictStr, Field(description="Advisor's email address")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> ApiResponse[DeleteContactsResponse]:
+ """(Deprecated) Removes all contacts of a given advisor (deprecated)
+
+ Removes all the contacts of an advisor matching the advisor's email address.
+
+ :param advisor_email_address: Advisor's email address (required)
+ :type advisor_email_address: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+ warnings.warn("DELETE /api/v1/customer/contacts/advisorEmailAddress/{advisorEmailAddress} is deprecated.", DeprecationWarning)
+
+ _param = self._delete_advisor_contacts_serialize(
+ advisor_email_address=advisor_email_address,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "DeleteContactsResponse",
+ '404': "InlineResponse4041",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ )
+
+
+ @validate_call
+ async def delete_advisor_contacts_without_preload_content(
+ self,
+ advisor_email_address: Annotated[StrictStr, Field(description="Advisor's email address")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RESTResponseType:
+ """(Deprecated) Removes all contacts of a given advisor (deprecated)
+
+ Removes all the contacts of an advisor matching the advisor's email address.
+
+ :param advisor_email_address: Advisor's email address (required)
+ :type advisor_email_address: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+ warnings.warn("DELETE /api/v1/customer/contacts/advisorEmailAddress/{advisorEmailAddress} is deprecated.", DeprecationWarning)
+
+ _param = self._delete_advisor_contacts_serialize(
+ advisor_email_address=advisor_email_address,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "DeleteContactsResponse",
+ '404': "InlineResponse4041",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ return response_data.response
+
+
+ def _delete_advisor_contacts_serialize(
+ self,
+ advisor_email_address,
+ _request_auth,
+ _content_type,
+ _headers,
+ _host_index,
+ ) -> RequestSerialized:
+
+ _host = None
+
+ _collection_formats: Dict[str, str] = {
+ }
+
+ _path_params: Dict[str, str] = {}
+ _query_params: List[Tuple[str, str]] = []
+ _header_params: Dict[str, Optional[str]] = _headers or {}
+ _form_params: List[Tuple[str, str]] = []
+ _files: Dict[
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
+ ] = {}
+ _body_params: Optional[bytes] = None
+
+ # process the path parameters
+ if advisor_email_address is not None:
+ _path_params['advisorEmailAddress'] = advisor_email_address
+ # process the query parameters
+ # process the header parameters
+ # process the form parameters
+ # process the body parameter
+
+
+ # set the HTTP header `Accept`
+ if 'Accept' not in _header_params:
+ _header_params['Accept'] = self.api_client.select_header_accept(
+ [
+ 'application/json'
+ ]
+ )
+
+
+ # authentication setting
+ _auth_settings: List[str] = [
+ 'sfsAuthentication'
+ ]
+
+ return self.api_client.param_serialize(
+ method='DELETE',
+ resource_path='/api/v1/customer/contacts/advisorEmailAddress/{advisorEmailAddress}',
+ path_params=_path_params,
+ query_params=_query_params,
+ header_params=_header_params,
+ body=_body_params,
+ post_params=_form_params,
+ files=_files,
+ auth_settings=_auth_settings,
+ collection_formats=_collection_formats,
+ _host=_host,
+ _request_auth=_request_auth
+ )
+
+
+
+
+ @validate_call
+ async def delete_advisor_contactsv2(
+ self,
+ advisor_symphony_id: Annotated[Decimal, Field(description="Advisor's Symphony user ID")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> CustomerDeleteAdvisorContactsResponsev2:
+ """Remove all contacts (recommended)
+
+ Removes all contacts of an advisor matching the advisor's Symphony user ID.
+
+ :param advisor_symphony_id: Advisor's Symphony user ID (required)
+ :type advisor_symphony_id: decimal.Decimal
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._delete_advisor_contactsv2_serialize(
+ advisor_symphony_id=advisor_symphony_id,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "CustomerDeleteAdvisorContactsResponsev2",
+ '404': "InlineResponse4041",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ ).data
+
+
+ @validate_call
+ async def delete_advisor_contactsv2_with_http_info(
+ self,
+ advisor_symphony_id: Annotated[Decimal, Field(description="Advisor's Symphony user ID")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> ApiResponse[CustomerDeleteAdvisorContactsResponsev2]:
+ """Remove all contacts (recommended)
+
+ Removes all contacts of an advisor matching the advisor's Symphony user ID.
+
+ :param advisor_symphony_id: Advisor's Symphony user ID (required)
+ :type advisor_symphony_id: decimal.Decimal
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._delete_advisor_contactsv2_serialize(
+ advisor_symphony_id=advisor_symphony_id,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "CustomerDeleteAdvisorContactsResponsev2",
+ '404': "InlineResponse4041",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ )
+
+
+ @validate_call
+ async def delete_advisor_contactsv2_without_preload_content(
+ self,
+ advisor_symphony_id: Annotated[Decimal, Field(description="Advisor's Symphony user ID")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RESTResponseType:
+ """Remove all contacts (recommended)
+
+ Removes all contacts of an advisor matching the advisor's Symphony user ID.
+
+ :param advisor_symphony_id: Advisor's Symphony user ID (required)
+ :type advisor_symphony_id: decimal.Decimal
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._delete_advisor_contactsv2_serialize(
+ advisor_symphony_id=advisor_symphony_id,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "CustomerDeleteAdvisorContactsResponsev2",
+ '404': "InlineResponse4041",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ return response_data.response
+
+
+ def _delete_advisor_contactsv2_serialize(
+ self,
+ advisor_symphony_id,
+ _request_auth,
+ _content_type,
+ _headers,
+ _host_index,
+ ) -> RequestSerialized:
+
+ _host = None
+
+ _collection_formats: Dict[str, str] = {
+ }
+
+ _path_params: Dict[str, str] = {}
+ _query_params: List[Tuple[str, str]] = []
+ _header_params: Dict[str, Optional[str]] = _headers or {}
+ _form_params: List[Tuple[str, str]] = []
+ _files: Dict[
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
+ ] = {}
+ _body_params: Optional[bytes] = None
+
+ # process the path parameters
+ if advisor_symphony_id is not None:
+ _path_params['advisorSymphonyId'] = advisor_symphony_id
+ # process the query parameters
+ # process the header parameters
+ # process the form parameters
+ # process the body parameter
+
+
+ # set the HTTP header `Accept`
+ if 'Accept' not in _header_params:
+ _header_params['Accept'] = self.api_client.select_header_accept(
+ [
+ 'application/json'
+ ]
+ )
+
+
+ # authentication setting
+ _auth_settings: List[str] = [
+ 'sfsAuthentication'
+ ]
+
+ return self.api_client.param_serialize(
+ method='DELETE',
+ resource_path='/api/v2/customer/contacts/advisor/{advisorSymphonyId}',
+ path_params=_path_params,
+ query_params=_query_params,
+ header_params=_header_params,
+ body=_body_params,
+ post_params=_form_params,
+ files=_files,
+ auth_settings=_auth_settings,
+ collection_formats=_collection_formats,
+ _host=_host,
+ _request_auth=_request_auth
+ )
+
+
+
+
+ @validate_call
+ async def delete_contact(
+ self,
+ advisor_email_address: Annotated[StrictStr, Field(description="Advisor's email address")],
+ contact_email_address: Annotated[StrictStr, Field(description="Contact's email address")],
+ external_network: Annotated[StrictStr, Field(description="External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> None:
+ """(Deprecated) Remove an advisor's contact (deprecated)
+
+ Remove an advisor's contact searching by the advisor's email address and the contact's email address for a given external network.
+
+ :param advisor_email_address: Advisor's email address (required)
+ :type advisor_email_address: str
+ :param contact_email_address: Contact's email address (required)
+ :type contact_email_address: str
+ :param external_network: External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE (required)
+ :type external_network: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+ warnings.warn("DELETE /api/v1/customer/contacts/advisorEmailAddress/{advisorEmailAddress}/contactEmailAddress/{contactEmailAddress}/externalNetwork/{externalNetwork} is deprecated.", DeprecationWarning)
+
+ _param = self._delete_contact_serialize(
+ advisor_email_address=advisor_email_address,
+ contact_email_address=contact_email_address,
+ external_network=external_network,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '204': None,
+ '404': "ContactNotFound",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ ).data
+
+
+ @validate_call
+ async def delete_contact_with_http_info(
+ self,
+ advisor_email_address: Annotated[StrictStr, Field(description="Advisor's email address")],
+ contact_email_address: Annotated[StrictStr, Field(description="Contact's email address")],
+ external_network: Annotated[StrictStr, Field(description="External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> ApiResponse[None]:
+ """(Deprecated) Remove an advisor's contact (deprecated)
+
+ Remove an advisor's contact searching by the advisor's email address and the contact's email address for a given external network.
+
+ :param advisor_email_address: Advisor's email address (required)
+ :type advisor_email_address: str
+ :param contact_email_address: Contact's email address (required)
+ :type contact_email_address: str
+ :param external_network: External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE (required)
+ :type external_network: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+ warnings.warn("DELETE /api/v1/customer/contacts/advisorEmailAddress/{advisorEmailAddress}/contactEmailAddress/{contactEmailAddress}/externalNetwork/{externalNetwork} is deprecated.", DeprecationWarning)
+
+ _param = self._delete_contact_serialize(
+ advisor_email_address=advisor_email_address,
+ contact_email_address=contact_email_address,
+ external_network=external_network,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '204': None,
+ '404': "ContactNotFound",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ )
+
+
+ @validate_call
+ async def delete_contact_without_preload_content(
+ self,
+ advisor_email_address: Annotated[StrictStr, Field(description="Advisor's email address")],
+ contact_email_address: Annotated[StrictStr, Field(description="Contact's email address")],
+ external_network: Annotated[StrictStr, Field(description="External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RESTResponseType:
+ """(Deprecated) Remove an advisor's contact (deprecated)
+
+ Remove an advisor's contact searching by the advisor's email address and the contact's email address for a given external network.
+
+ :param advisor_email_address: Advisor's email address (required)
+ :type advisor_email_address: str
+ :param contact_email_address: Contact's email address (required)
+ :type contact_email_address: str
+ :param external_network: External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE (required)
+ :type external_network: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+ warnings.warn("DELETE /api/v1/customer/contacts/advisorEmailAddress/{advisorEmailAddress}/contactEmailAddress/{contactEmailAddress}/externalNetwork/{externalNetwork} is deprecated.", DeprecationWarning)
+
+ _param = self._delete_contact_serialize(
+ advisor_email_address=advisor_email_address,
+ contact_email_address=contact_email_address,
+ external_network=external_network,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '204': None,
+ '404': "ContactNotFound",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ return response_data.response
+
+
+ def _delete_contact_serialize(
+ self,
+ advisor_email_address,
+ contact_email_address,
+ external_network,
+ _request_auth,
+ _content_type,
+ _headers,
+ _host_index,
+ ) -> RequestSerialized:
+
+ _host = None
+
+ _collection_formats: Dict[str, str] = {
+ }
+
+ _path_params: Dict[str, str] = {}
+ _query_params: List[Tuple[str, str]] = []
+ _header_params: Dict[str, Optional[str]] = _headers or {}
+ _form_params: List[Tuple[str, str]] = []
+ _files: Dict[
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
+ ] = {}
+ _body_params: Optional[bytes] = None
+
+ # process the path parameters
+ if advisor_email_address is not None:
+ _path_params['advisorEmailAddress'] = advisor_email_address
+ if contact_email_address is not None:
+ _path_params['contactEmailAddress'] = contact_email_address
+ if external_network is not None:
+ _path_params['externalNetwork'] = external_network
+ # process the query parameters
+ # process the header parameters
+ # process the form parameters
+ # process the body parameter
+
+
+ # set the HTTP header `Accept`
+ if 'Accept' not in _header_params:
+ _header_params['Accept'] = self.api_client.select_header_accept(
+ [
+ 'application/json'
+ ]
+ )
+
+
+ # authentication setting
+ _auth_settings: List[str] = [
+ 'sfsAuthentication'
+ ]
+
+ return self.api_client.param_serialize(
+ method='DELETE',
+ resource_path='/api/v1/customer/contacts/advisorEmailAddress/{advisorEmailAddress}/contactEmailAddress/{contactEmailAddress}/externalNetwork/{externalNetwork}',
+ path_params=_path_params,
+ query_params=_query_params,
+ header_params=_header_params,
+ body=_body_params,
+ post_params=_form_params,
+ files=_files,
+ auth_settings=_auth_settings,
+ collection_formats=_collection_formats,
+ _host=_host,
+ _request_auth=_request_auth
+ )
+
+
+
+
+ @validate_call
+ async def delete_contacts(
+ self,
+ delete_contacts_request: Optional[DeleteContactsRequest] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> DeleteContactsResponse:
+ """(Deprecated) Remove specific advisor-contact connections in bulk (deprecated)
+
+ Bulk remove the connections between advisor-contact pairs. Takes in the body of the request an array of objects composed of advisor's email address, contact's email address and external network.
+
+ :param delete_contacts_request:
+ :type delete_contacts_request: DeleteContactsRequest
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+ warnings.warn("POST /api/v1/customer/contacts/removal is deprecated.", DeprecationWarning)
+
+ _param = self._delete_contacts_serialize(
+ delete_contacts_request=delete_contacts_request,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "DeleteContactsResponse",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ ).data
+
+
+ @validate_call
+ async def delete_contacts_with_http_info(
+ self,
+ delete_contacts_request: Optional[DeleteContactsRequest] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> ApiResponse[DeleteContactsResponse]:
+ """(Deprecated) Remove specific advisor-contact connections in bulk (deprecated)
+
+ Bulk remove the connections between advisor-contact pairs. Takes in the body of the request an array of objects composed of advisor's email address, contact's email address and external network.
+
+ :param delete_contacts_request:
+ :type delete_contacts_request: DeleteContactsRequest
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+ warnings.warn("POST /api/v1/customer/contacts/removal is deprecated.", DeprecationWarning)
+
+ _param = self._delete_contacts_serialize(
+ delete_contacts_request=delete_contacts_request,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "DeleteContactsResponse",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ )
+
+
+ @validate_call
+ async def delete_contacts_without_preload_content(
+ self,
+ delete_contacts_request: Optional[DeleteContactsRequest] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RESTResponseType:
+ """(Deprecated) Remove specific advisor-contact connections in bulk (deprecated)
+
+ Bulk remove the connections between advisor-contact pairs. Takes in the body of the request an array of objects composed of advisor's email address, contact's email address and external network.
+
+ :param delete_contacts_request:
+ :type delete_contacts_request: DeleteContactsRequest
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+ warnings.warn("POST /api/v1/customer/contacts/removal is deprecated.", DeprecationWarning)
+
+ _param = self._delete_contacts_serialize(
+ delete_contacts_request=delete_contacts_request,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "DeleteContactsResponse",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ return response_data.response
+
+
+ def _delete_contacts_serialize(
+ self,
+ delete_contacts_request,
+ _request_auth,
+ _content_type,
+ _headers,
+ _host_index,
+ ) -> RequestSerialized:
+
+ _host = None
+
+ _collection_formats: Dict[str, str] = {
+ }
+
+ _path_params: Dict[str, str] = {}
+ _query_params: List[Tuple[str, str]] = []
+ _header_params: Dict[str, Optional[str]] = _headers or {}
+ _form_params: List[Tuple[str, str]] = []
+ _files: Dict[
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
+ ] = {}
+ _body_params: Optional[bytes] = None
+
+ # process the path parameters
+ # process the query parameters
+ # process the header parameters
+ # process the form parameters
+ # process the body parameter
+ if delete_contacts_request is not None:
+ _body_params = delete_contacts_request
+
+
+ # set the HTTP header `Accept`
+ if 'Accept' not in _header_params:
+ _header_params['Accept'] = self.api_client.select_header_accept(
+ [
+ 'application/json'
+ ]
+ )
+
+ # set the HTTP header `Content-Type`
+ if _content_type:
+ _header_params['Content-Type'] = _content_type
+ else:
+ _default_content_type = (
+ self.api_client.select_header_content_type(
+ [
+ 'application/json'
+ ]
+ )
+ )
+ if _default_content_type is not None:
+ _header_params['Content-Type'] = _default_content_type
+
+ # authentication setting
+ _auth_settings: List[str] = [
+ 'sfsAuthentication'
+ ]
+
+ return self.api_client.param_serialize(
+ method='POST',
+ resource_path='/api/v1/customer/contacts/removal',
+ path_params=_path_params,
+ query_params=_query_params,
+ header_params=_header_params,
+ body=_body_params,
+ post_params=_form_params,
+ files=_files,
+ auth_settings=_auth_settings,
+ collection_formats=_collection_formats,
+ _host=_host,
+ _request_auth=_request_auth
+ )
+
+
+
+
+ @validate_call
+ async def delete_contacts_by_email_and_external_network(
+ self,
+ contact_email_address: Annotated[StrictStr, Field(description="Contact's email address")],
+ external_network: Annotated[StrictStr, Field(description="External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> CustomerContactsWithIdResponse:
+ """(Deprecated) Remove the contact from all advisors they are connected to for a given external network (deprecated)
+
+ Removes the contact from all the advisors they are connected to, searching by the contact's email address and the external network. This operation will only affect the tenant's advisors.
+
+ :param contact_email_address: Contact's email address (required)
+ :type contact_email_address: str
+ :param external_network: External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE (required)
+ :type external_network: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+ warnings.warn("DELETE /api/v1/customer/contacts/contactEmailAddress/{contactEmailAddress}/externalNetwork/{externalNetwork} is deprecated.", DeprecationWarning)
+
+ _param = self._delete_contacts_by_email_and_external_network_serialize(
+ contact_email_address=contact_email_address,
+ external_network=external_network,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "CustomerContactsWithIdResponse",
+ '404': "ContactNotFound",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ ).data
+
+
+ @validate_call
+ async def delete_contacts_by_email_and_external_network_with_http_info(
+ self,
+ contact_email_address: Annotated[StrictStr, Field(description="Contact's email address")],
+ external_network: Annotated[StrictStr, Field(description="External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> ApiResponse[CustomerContactsWithIdResponse]:
+ """(Deprecated) Remove the contact from all advisors they are connected to for a given external network (deprecated)
+
+ Removes the contact from all the advisors they are connected to, searching by the contact's email address and the external network. This operation will only affect the tenant's advisors.
+
+ :param contact_email_address: Contact's email address (required)
+ :type contact_email_address: str
+ :param external_network: External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE (required)
+ :type external_network: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+ warnings.warn("DELETE /api/v1/customer/contacts/contactEmailAddress/{contactEmailAddress}/externalNetwork/{externalNetwork} is deprecated.", DeprecationWarning)
+
+ _param = self._delete_contacts_by_email_and_external_network_serialize(
+ contact_email_address=contact_email_address,
+ external_network=external_network,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "CustomerContactsWithIdResponse",
+ '404': "ContactNotFound",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ )
+
+
+ @validate_call
+ async def delete_contacts_by_email_and_external_network_without_preload_content(
+ self,
+ contact_email_address: Annotated[StrictStr, Field(description="Contact's email address")],
+ external_network: Annotated[StrictStr, Field(description="External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RESTResponseType:
+ """(Deprecated) Remove the contact from all advisors they are connected to for a given external network (deprecated)
+
+ Removes the contact from all the advisors they are connected to, searching by the contact's email address and the external network. This operation will only affect the tenant's advisors.
+
+ :param contact_email_address: Contact's email address (required)
+ :type contact_email_address: str
+ :param external_network: External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE (required)
+ :type external_network: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+ warnings.warn("DELETE /api/v1/customer/contacts/contactEmailAddress/{contactEmailAddress}/externalNetwork/{externalNetwork} is deprecated.", DeprecationWarning)
+
+ _param = self._delete_contacts_by_email_and_external_network_serialize(
+ contact_email_address=contact_email_address,
+ external_network=external_network,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "CustomerContactsWithIdResponse",
+ '404': "ContactNotFound",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ return response_data.response
+
+
+ def _delete_contacts_by_email_and_external_network_serialize(
+ self,
+ contact_email_address,
+ external_network,
+ _request_auth,
+ _content_type,
+ _headers,
+ _host_index,
+ ) -> RequestSerialized:
+
+ _host = None
+
+ _collection_formats: Dict[str, str] = {
+ }
+
+ _path_params: Dict[str, str] = {}
+ _query_params: List[Tuple[str, str]] = []
+ _header_params: Dict[str, Optional[str]] = _headers or {}
+ _form_params: List[Tuple[str, str]] = []
+ _files: Dict[
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
+ ] = {}
+ _body_params: Optional[bytes] = None
+
+ # process the path parameters
+ if contact_email_address is not None:
+ _path_params['contactEmailAddress'] = contact_email_address
+ if external_network is not None:
+ _path_params['externalNetwork'] = external_network
+ # process the query parameters
+ # process the header parameters
+ # process the form parameters
+ # process the body parameter
+
+
+ # set the HTTP header `Accept`
+ if 'Accept' not in _header_params:
+ _header_params['Accept'] = self.api_client.select_header_accept(
+ [
+ 'application/json'
+ ]
+ )
+
+
+ # authentication setting
+ _auth_settings: List[str] = [
+ 'sfsAuthentication'
+ ]
+
+ return self.api_client.param_serialize(
+ method='DELETE',
+ resource_path='/api/v1/customer/contacts/contactEmailAddress/{contactEmailAddress}/externalNetwork/{externalNetwork}',
+ path_params=_path_params,
+ query_params=_query_params,
+ header_params=_header_params,
+ body=_body_params,
+ post_params=_form_params,
+ files=_files,
+ auth_settings=_auth_settings,
+ collection_formats=_collection_formats,
+ _host=_host,
+ _request_auth=_request_auth
+ )
+
+
+
+
+ @validate_call
+ async def delete_contacts_by_symphony_id_and_external_networkv2(
+ self,
+ contact_symphony_id: Annotated[Decimal, Field(description="Contact's Symphony user ID")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> CustomerContactsWithIdResponsev2:
+ """Remove the contact from all advisors they are connected to for a given external network (recommended)
+
+ Remove the contact from all the advisors they are connected to for a given external network.
+
+ :param contact_symphony_id: Contact's Symphony user ID (required)
+ :type contact_symphony_id: decimal.Decimal
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._delete_contacts_by_symphony_id_and_external_networkv2_serialize(
+ contact_symphony_id=contact_symphony_id,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "CustomerContactsWithIdResponsev2",
+ '404': "ContactNotFound",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ ).data
+
+
+ @validate_call
+ async def delete_contacts_by_symphony_id_and_external_networkv2_with_http_info(
+ self,
+ contact_symphony_id: Annotated[Decimal, Field(description="Contact's Symphony user ID")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> ApiResponse[CustomerContactsWithIdResponsev2]:
+ """Remove the contact from all advisors they are connected to for a given external network (recommended)
+
+ Remove the contact from all the advisors they are connected to for a given external network.
+
+ :param contact_symphony_id: Contact's Symphony user ID (required)
+ :type contact_symphony_id: decimal.Decimal
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._delete_contacts_by_symphony_id_and_external_networkv2_serialize(
+ contact_symphony_id=contact_symphony_id,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "CustomerContactsWithIdResponsev2",
+ '404': "ContactNotFound",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ )
+
+
+ @validate_call
+ async def delete_contacts_by_symphony_id_and_external_networkv2_without_preload_content(
+ self,
+ contact_symphony_id: Annotated[Decimal, Field(description="Contact's Symphony user ID")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RESTResponseType:
+ """Remove the contact from all advisors they are connected to for a given external network (recommended)
+
+ Remove the contact from all the advisors they are connected to for a given external network.
+
+ :param contact_symphony_id: Contact's Symphony user ID (required)
+ :type contact_symphony_id: decimal.Decimal
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._delete_contacts_by_symphony_id_and_external_networkv2_serialize(
+ contact_symphony_id=contact_symphony_id,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "CustomerContactsWithIdResponsev2",
+ '404': "ContactNotFound",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ return response_data.response
+
+
+ def _delete_contacts_by_symphony_id_and_external_networkv2_serialize(
+ self,
+ contact_symphony_id,
+ _request_auth,
+ _content_type,
+ _headers,
+ _host_index,
+ ) -> RequestSerialized:
+
+ _host = None
+
+ _collection_formats: Dict[str, str] = {
+ }
+
+ _path_params: Dict[str, str] = {}
+ _query_params: List[Tuple[str, str]] = []
+ _header_params: Dict[str, Optional[str]] = _headers or {}
+ _form_params: List[Tuple[str, str]] = []
+ _files: Dict[
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
+ ] = {}
+ _body_params: Optional[bytes] = None
+
+ # process the path parameters
+ if contact_symphony_id is not None:
+ _path_params['contactSymphonyId'] = contact_symphony_id
+ # process the query parameters
+ # process the header parameters
+ # process the form parameters
+ # process the body parameter
+
+
+ # set the HTTP header `Accept`
+ if 'Accept' not in _header_params:
+ _header_params['Accept'] = self.api_client.select_header_accept(
+ [
+ 'application/json'
+ ]
+ )
+
+
+ # authentication setting
+ _auth_settings: List[str] = [
+ 'sfsAuthentication'
+ ]
+
+ return self.api_client.param_serialize(
+ method='DELETE',
+ resource_path='/api/v2/customer/contacts/{contactSymphonyId}',
+ path_params=_path_params,
+ query_params=_query_params,
+ header_params=_header_params,
+ body=_body_params,
+ post_params=_form_params,
+ files=_files,
+ auth_settings=_auth_settings,
+ collection_formats=_collection_formats,
+ _host=_host,
+ _request_auth=_request_auth
+ )
+
+
+
+
+ @validate_call
+ async def delete_contactsv2(
+ self,
+ delete_contacts_requestv2: Optional[DeleteContactsRequestv2] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> DeleteContactsResponsev2:
+ """Bulk remove advisor-contact connection (recommended)
+
+ Remove specific advisor-contact connections in bulk.
+
+ :param delete_contacts_requestv2:
+ :type delete_contacts_requestv2: DeleteContactsRequestv2
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._delete_contactsv2_serialize(
+ delete_contacts_requestv2=delete_contacts_requestv2,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "DeleteContactsResponsev2",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ ).data
+
+
+ @validate_call
+ async def delete_contactsv2_with_http_info(
+ self,
+ delete_contacts_requestv2: Optional[DeleteContactsRequestv2] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> ApiResponse[DeleteContactsResponsev2]:
+ """Bulk remove advisor-contact connection (recommended)
+
+ Remove specific advisor-contact connections in bulk.
+
+ :param delete_contacts_requestv2:
+ :type delete_contacts_requestv2: DeleteContactsRequestv2
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._delete_contactsv2_serialize(
+ delete_contacts_requestv2=delete_contacts_requestv2,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "DeleteContactsResponsev2",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ )
+
+
+ @validate_call
+ async def delete_contactsv2_without_preload_content(
+ self,
+ delete_contacts_requestv2: Optional[DeleteContactsRequestv2] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RESTResponseType:
+ """Bulk remove advisor-contact connection (recommended)
+
+ Remove specific advisor-contact connections in bulk.
+
+ :param delete_contacts_requestv2:
+ :type delete_contacts_requestv2: DeleteContactsRequestv2
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._delete_contactsv2_serialize(
+ delete_contacts_requestv2=delete_contacts_requestv2,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "DeleteContactsResponsev2",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ return response_data.response
+
+
+ def _delete_contactsv2_serialize(
+ self,
+ delete_contacts_requestv2,
+ _request_auth,
+ _content_type,
+ _headers,
+ _host_index,
+ ) -> RequestSerialized:
+
+ _host = None
+
+ _collection_formats: Dict[str, str] = {
+ }
+
+ _path_params: Dict[str, str] = {}
+ _query_params: List[Tuple[str, str]] = []
+ _header_params: Dict[str, Optional[str]] = _headers or {}
+ _form_params: List[Tuple[str, str]] = []
+ _files: Dict[
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
+ ] = {}
+ _body_params: Optional[bytes] = None
+
+ # process the path parameters
+ # process the query parameters
+ # process the header parameters
+ # process the form parameters
+ # process the body parameter
+ if delete_contacts_requestv2 is not None:
+ _body_params = delete_contacts_requestv2
+
+
+ # set the HTTP header `Accept`
+ if 'Accept' not in _header_params:
+ _header_params['Accept'] = self.api_client.select_header_accept(
+ [
+ 'application/json'
+ ]
+ )
+
+ # set the HTTP header `Content-Type`
+ if _content_type:
+ _header_params['Content-Type'] = _content_type
+ else:
+ _default_content_type = (
+ self.api_client.select_header_content_type(
+ [
+ 'application/json'
+ ]
+ )
+ )
+ if _default_content_type is not None:
+ _header_params['Content-Type'] = _default_content_type
+
+ # authentication setting
+ _auth_settings: List[str] = [
+ 'sfsAuthentication'
+ ]
+
+ return self.api_client.param_serialize(
+ method='POST',
+ resource_path='/api/v2/customer/contacts/removal',
+ path_params=_path_params,
+ query_params=_query_params,
+ header_params=_header_params,
+ body=_body_params,
+ post_params=_form_params,
+ files=_files,
+ auth_settings=_auth_settings,
+ collection_formats=_collection_formats,
+ _host=_host,
+ _request_auth=_request_auth
+ )
+
+
+
+
+ @validate_call
+ async def delete_contactv2(
+ self,
+ advisor_symphony_id: Annotated[Decimal, Field(description="Advisor's Symphony user ID")],
+ contact_symphony_id: Annotated[Decimal, Field(description="Contact's Symphony user ID")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> None:
+ """Remove contact (recommended)
+
+ Remove an advisor's contact searching by the advisor's Symphony user ID and the contact's Symphony user ID
+
+ :param advisor_symphony_id: Advisor's Symphony user ID (required)
+ :type advisor_symphony_id: decimal.Decimal
+ :param contact_symphony_id: Contact's Symphony user ID (required)
+ :type contact_symphony_id: decimal.Decimal
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._delete_contactv2_serialize(
+ advisor_symphony_id=advisor_symphony_id,
+ contact_symphony_id=contact_symphony_id,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '204': None,
+ '404': "ContactNotFound",
+ '401': "Unauthorized",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ ).data
+
+
+ @validate_call
+ async def delete_contactv2_with_http_info(
+ self,
+ advisor_symphony_id: Annotated[Decimal, Field(description="Advisor's Symphony user ID")],
+ contact_symphony_id: Annotated[Decimal, Field(description="Contact's Symphony user ID")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> ApiResponse[None]:
+ """Remove contact (recommended)
+
+ Remove an advisor's contact searching by the advisor's Symphony user ID and the contact's Symphony user ID
+
+ :param advisor_symphony_id: Advisor's Symphony user ID (required)
+ :type advisor_symphony_id: decimal.Decimal
+ :param contact_symphony_id: Contact's Symphony user ID (required)
+ :type contact_symphony_id: decimal.Decimal
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._delete_contactv2_serialize(
+ advisor_symphony_id=advisor_symphony_id,
+ contact_symphony_id=contact_symphony_id,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '204': None,
+ '404': "ContactNotFound",
+ '401': "Unauthorized",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ )
+
+
+ @validate_call
+ async def delete_contactv2_without_preload_content(
+ self,
+ advisor_symphony_id: Annotated[Decimal, Field(description="Advisor's Symphony user ID")],
+ contact_symphony_id: Annotated[Decimal, Field(description="Contact's Symphony user ID")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RESTResponseType:
+ """Remove contact (recommended)
+
+ Remove an advisor's contact searching by the advisor's Symphony user ID and the contact's Symphony user ID
+
+ :param advisor_symphony_id: Advisor's Symphony user ID (required)
+ :type advisor_symphony_id: decimal.Decimal
+ :param contact_symphony_id: Contact's Symphony user ID (required)
+ :type contact_symphony_id: decimal.Decimal
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._delete_contactv2_serialize(
+ advisor_symphony_id=advisor_symphony_id,
+ contact_symphony_id=contact_symphony_id,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '204': None,
+ '404': "ContactNotFound",
+ '401': "Unauthorized",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ return response_data.response
+
+
+ def _delete_contactv2_serialize(
+ self,
+ advisor_symphony_id,
+ contact_symphony_id,
+ _request_auth,
+ _content_type,
+ _headers,
+ _host_index,
+ ) -> RequestSerialized:
+
+ _host = None
+
+ _collection_formats: Dict[str, str] = {
+ }
+
+ _path_params: Dict[str, str] = {}
+ _query_params: List[Tuple[str, str]] = []
+ _header_params: Dict[str, Optional[str]] = _headers or {}
+ _form_params: List[Tuple[str, str]] = []
+ _files: Dict[
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
+ ] = {}
+ _body_params: Optional[bytes] = None
+
+ # process the path parameters
+ if advisor_symphony_id is not None:
+ _path_params['advisorSymphonyId'] = advisor_symphony_id
+ if contact_symphony_id is not None:
+ _path_params['contactSymphonyId'] = contact_symphony_id
+ # process the query parameters
+ # process the header parameters
+ # process the form parameters
+ # process the body parameter
+
+
+ # set the HTTP header `Accept`
+ if 'Accept' not in _header_params:
+ _header_params['Accept'] = self.api_client.select_header_accept(
+ [
+ 'application/json'
+ ]
+ )
+
+
+ # authentication setting
+ _auth_settings: List[str] = [
+ 'sfsAuthentication'
+ ]
+
+ return self.api_client.param_serialize(
+ method='DELETE',
+ resource_path='/api/v2/customer/contacts/{contactSymphonyId}/advisor/{advisorSymphonyId}',
+ path_params=_path_params,
+ query_params=_query_params,
+ header_params=_header_params,
+ body=_body_params,
+ post_params=_form_params,
+ files=_files,
+ auth_settings=_auth_settings,
+ collection_formats=_collection_formats,
+ _host=_host,
+ _request_auth=_request_auth
+ )
+
+
+
+
+ @validate_call
+ async def update_contacts(
+ self,
+ contact_email_address: Annotated[StrictStr, Field(description="Contact's email address")],
+ customer_update_contacts_request: Optional[CustomerUpdateContactsRequest] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> UpdateContactsResponse:
+ """(Deprecated) Update Contact (deprecated)
+
+ Update the first name, last name, company name (maximum 100 characters long) of a contact for a given external network.
Updating the contact's email address or phone number is not supported.
+
+ :param contact_email_address: Contact's email address (required)
+ :type contact_email_address: str
+ :param customer_update_contacts_request:
+ :type customer_update_contacts_request: CustomerUpdateContactsRequest
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+ warnings.warn("POST /api/v1/customer/contacts/{contactEmailAddress}/update is deprecated.", DeprecationWarning)
+
+ _param = self._update_contacts_serialize(
+ contact_email_address=contact_email_address,
+ customer_update_contacts_request=customer_update_contacts_request,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "UpdateContactsResponse",
+ '400': "ExternalNetworkNotFound",
+ '403': "UpdateContactsv2403Response",
+ '401': "Unauthorized",
+ '404': "InlineResponse4044",
+ '500': "UpdateAccountFailed",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ ).data
+
+
+ @validate_call
+ async def update_contacts_with_http_info(
+ self,
+ contact_email_address: Annotated[StrictStr, Field(description="Contact's email address")],
+ customer_update_contacts_request: Optional[CustomerUpdateContactsRequest] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> ApiResponse[UpdateContactsResponse]:
+ """(Deprecated) Update Contact (deprecated)
+
+ Update the first name, last name, company name (maximum 100 characters long) of a contact for a given external network.
Updating the contact's email address or phone number is not supported.
+
+ :param contact_email_address: Contact's email address (required)
+ :type contact_email_address: str
+ :param customer_update_contacts_request:
+ :type customer_update_contacts_request: CustomerUpdateContactsRequest
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+ warnings.warn("POST /api/v1/customer/contacts/{contactEmailAddress}/update is deprecated.", DeprecationWarning)
+
+ _param = self._update_contacts_serialize(
+ contact_email_address=contact_email_address,
+ customer_update_contacts_request=customer_update_contacts_request,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "UpdateContactsResponse",
+ '400': "ExternalNetworkNotFound",
+ '403': "UpdateContactsv2403Response",
+ '401': "Unauthorized",
+ '404': "InlineResponse4044",
+ '500': "UpdateAccountFailed",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ )
+
+
+ @validate_call
+ async def update_contacts_without_preload_content(
+ self,
+ contact_email_address: Annotated[StrictStr, Field(description="Contact's email address")],
+ customer_update_contacts_request: Optional[CustomerUpdateContactsRequest] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RESTResponseType:
+ """(Deprecated) Update Contact (deprecated)
+
+ Update the first name, last name, company name (maximum 100 characters long) of a contact for a given external network.
Updating the contact's email address or phone number is not supported.
+
+ :param contact_email_address: Contact's email address (required)
+ :type contact_email_address: str
+ :param customer_update_contacts_request:
+ :type customer_update_contacts_request: CustomerUpdateContactsRequest
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+ warnings.warn("POST /api/v1/customer/contacts/{contactEmailAddress}/update is deprecated.", DeprecationWarning)
+
+ _param = self._update_contacts_serialize(
+ contact_email_address=contact_email_address,
+ customer_update_contacts_request=customer_update_contacts_request,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "UpdateContactsResponse",
+ '400': "ExternalNetworkNotFound",
+ '403': "UpdateContactsv2403Response",
+ '401': "Unauthorized",
+ '404': "InlineResponse4044",
+ '500': "UpdateAccountFailed",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ return response_data.response
+
+
+ def _update_contacts_serialize(
+ self,
+ contact_email_address,
+ customer_update_contacts_request,
+ _request_auth,
+ _content_type,
+ _headers,
+ _host_index,
+ ) -> RequestSerialized:
+
+ _host = None
+
+ _collection_formats: Dict[str, str] = {
+ }
+
+ _path_params: Dict[str, str] = {}
+ _query_params: List[Tuple[str, str]] = []
+ _header_params: Dict[str, Optional[str]] = _headers or {}
+ _form_params: List[Tuple[str, str]] = []
+ _files: Dict[
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
+ ] = {}
+ _body_params: Optional[bytes] = None
+
+ # process the path parameters
+ if contact_email_address is not None:
+ _path_params['contactEmailAddress'] = contact_email_address
+ # process the query parameters
+ # process the header parameters
+ # process the form parameters
+ # process the body parameter
+ if customer_update_contacts_request is not None:
+ _body_params = customer_update_contacts_request
+
+
+ # set the HTTP header `Accept`
+ if 'Accept' not in _header_params:
+ _header_params['Accept'] = self.api_client.select_header_accept(
+ [
+ 'application/json'
+ ]
+ )
+
+ # set the HTTP header `Content-Type`
+ if _content_type:
+ _header_params['Content-Type'] = _content_type
+ else:
+ _default_content_type = (
+ self.api_client.select_header_content_type(
+ [
+ 'application/json'
+ ]
+ )
+ )
+ if _default_content_type is not None:
+ _header_params['Content-Type'] = _default_content_type
+
+ # authentication setting
+ _auth_settings: List[str] = [
+ 'sfsAuthentication'
+ ]
+
+ return self.api_client.param_serialize(
+ method='POST',
+ resource_path='/api/v1/customer/contacts/{contactEmailAddress}/update',
+ path_params=_path_params,
+ query_params=_query_params,
+ header_params=_header_params,
+ body=_body_params,
+ post_params=_form_params,
+ files=_files,
+ auth_settings=_auth_settings,
+ collection_formats=_collection_formats,
+ _host=_host,
+ _request_auth=_request_auth
+ )
+
+
+
+
+ @validate_call
+ async def update_contactsv2(
+ self,
+ contact_symphony_id: Annotated[StrictStr, Field(description="Contact's Symphony user ID")],
+ customer_update_contacts_requestv2: Optional[CustomerUpdateContactsRequestv2] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> UpdateContactsResponseV2:
+ """Update contact (recommended)
+
+ Update a contact's first name, last name, company name (maximum 100 characters) and, if the advisor has the permission for this, the contact's email address for a given external network.
Note: Updating a contact's phone number is not supported.
+
+ :param contact_symphony_id: Contact's Symphony user ID (required)
+ :type contact_symphony_id: str
+ :param customer_update_contacts_requestv2:
+ :type customer_update_contacts_requestv2: CustomerUpdateContactsRequestv2
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._update_contactsv2_serialize(
+ contact_symphony_id=contact_symphony_id,
+ customer_update_contacts_requestv2=customer_update_contacts_requestv2,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "UpdateContactsResponseV2",
+ '400': "ExternalNetworkNotFound",
+ '401': "Unauthorized",
+ '403': "UpdateContactsv2403Response",
+ '404': "InlineResponse4044",
+ '409': "UserAlreadyExists",
+ '500': "UpdateAccountFailed",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ ).data
+
+
+ @validate_call
+ async def update_contactsv2_with_http_info(
+ self,
+ contact_symphony_id: Annotated[StrictStr, Field(description="Contact's Symphony user ID")],
+ customer_update_contacts_requestv2: Optional[CustomerUpdateContactsRequestv2] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> ApiResponse[UpdateContactsResponseV2]:
+ """Update contact (recommended)
+
+ Update a contact's first name, last name, company name (maximum 100 characters) and, if the advisor has the permission for this, the contact's email address for a given external network.
Note: Updating a contact's phone number is not supported.
+
+ :param contact_symphony_id: Contact's Symphony user ID (required)
+ :type contact_symphony_id: str
+ :param customer_update_contacts_requestv2:
+ :type customer_update_contacts_requestv2: CustomerUpdateContactsRequestv2
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._update_contactsv2_serialize(
+ contact_symphony_id=contact_symphony_id,
+ customer_update_contacts_requestv2=customer_update_contacts_requestv2,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "UpdateContactsResponseV2",
+ '400': "ExternalNetworkNotFound",
+ '401': "Unauthorized",
+ '403': "UpdateContactsv2403Response",
+ '404': "InlineResponse4044",
+ '409': "UserAlreadyExists",
+ '500': "UpdateAccountFailed",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ )
+
+
+ @validate_call
+ async def update_contactsv2_without_preload_content(
+ self,
+ contact_symphony_id: Annotated[StrictStr, Field(description="Contact's Symphony user ID")],
+ customer_update_contacts_requestv2: Optional[CustomerUpdateContactsRequestv2] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RESTResponseType:
+ """Update contact (recommended)
+
+ Update a contact's first name, last name, company name (maximum 100 characters) and, if the advisor has the permission for this, the contact's email address for a given external network.
Note: Updating a contact's phone number is not supported.
+
+ :param contact_symphony_id: Contact's Symphony user ID (required)
+ :type contact_symphony_id: str
+ :param customer_update_contacts_requestv2:
+ :type customer_update_contacts_requestv2: CustomerUpdateContactsRequestv2
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._update_contactsv2_serialize(
+ contact_symphony_id=contact_symphony_id,
+ customer_update_contacts_requestv2=customer_update_contacts_requestv2,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "UpdateContactsResponseV2",
+ '400': "ExternalNetworkNotFound",
+ '401': "Unauthorized",
+ '403': "UpdateContactsv2403Response",
+ '404': "InlineResponse4044",
+ '409': "UserAlreadyExists",
+ '500': "UpdateAccountFailed",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ return response_data.response
+
+
+ def _update_contactsv2_serialize(
+ self,
+ contact_symphony_id,
+ customer_update_contacts_requestv2,
+ _request_auth,
+ _content_type,
+ _headers,
+ _host_index,
+ ) -> RequestSerialized:
+
+ _host = None
+
+ _collection_formats: Dict[str, str] = {
+ }
+
+ _path_params: Dict[str, str] = {}
+ _query_params: List[Tuple[str, str]] = []
+ _header_params: Dict[str, Optional[str]] = _headers or {}
+ _form_params: List[Tuple[str, str]] = []
+ _files: Dict[
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
+ ] = {}
+ _body_params: Optional[bytes] = None
+
+ # process the path parameters
+ if contact_symphony_id is not None:
+ _path_params['contactSymphonyId'] = contact_symphony_id
+ # process the query parameters
+ # process the header parameters
+ # process the form parameters
+ # process the body parameter
+ if customer_update_contacts_requestv2 is not None:
+ _body_params = customer_update_contacts_requestv2
+
+
+ # set the HTTP header `Accept`
+ if 'Accept' not in _header_params:
+ _header_params['Accept'] = self.api_client.select_header_accept(
+ [
+ 'application/json'
+ ]
+ )
+
+ # set the HTTP header `Content-Type`
+ if _content_type:
+ _header_params['Content-Type'] = _content_type
+ else:
+ _default_content_type = (
+ self.api_client.select_header_content_type(
+ [
+ 'application/json'
+ ]
+ )
+ )
+ if _default_content_type is not None:
+ _header_params['Content-Type'] = _default_content_type
+
+ # authentication setting
+ _auth_settings: List[str] = [
+ 'sfsAuthentication'
+ ]
+
+ return self.api_client.param_serialize(
+ method='PUT',
+ resource_path='/api/v2/customer/contacts/{contactSymphonyId}',
+ path_params=_path_params,
+ query_params=_query_params,
+ header_params=_header_params,
+ body=_body_params,
+ post_params=_form_params,
+ files=_files,
+ auth_settings=_auth_settings,
+ collection_formats=_collection_formats,
+ _host=_host,
+ _request_auth=_request_auth
+ )
+
+
diff --git a/symphony/bdk/gen/federation_api/customer_block_api.py b/symphony/bdk/gen/federation_api/customer_block_api.py
new file mode 100644
index 00000000..072f6da4
--- /dev/null
+++ b/symphony/bdk/gen/federation_api/customer_block_api.py
@@ -0,0 +1,1717 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+import warnings
+from pydantic import validate_call, Field, StrictFloat, StrictStr, StrictInt
+from typing import Any, Dict, List, Optional, Tuple, Union
+from typing_extensions import Annotated
+
+from pydantic import Field, StrictStr, field_validator
+from typing import List, Optional
+from typing_extensions import Annotated
+from symphony.bdk.gen.federation_model.customer_block_phone_numbers_request import CustomerBlockPhoneNumbersRequest
+from symphony.bdk.gen.federation_model.customer_block_phone_numbers_response import CustomerBlockPhoneNumbersResponse
+from symphony.bdk.gen.federation_model.get_blocked_phone_numbers_response import GetBlockedPhoneNumbersResponse
+
+from symphony.bdk.gen.api_client import ApiClient, RequestSerialized
+from symphony.bdk.gen.api_response import ApiResponse
+from symphony.bdk.gen.rest import RESTResponseType
+
+
+class CustomerBlockApi:
+ """NOTE: This class is auto generated by OpenAPI Generator
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+ """
+
+ def __init__(self, api_client=None) -> None:
+ if api_client is None:
+ api_client = ApiClient.get_default()
+ self.api_client = api_client
+
+
+ @validate_call
+ async def block_phone_numbers(
+ self,
+ advisor_symphony_id: Annotated[str, Field(strict=True, description="The symphonyId for which we are blocking the phone numbers")],
+ customer_block_phone_numbers_request: Optional[CustomerBlockPhoneNumbersRequest] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> CustomerBlockPhoneNumbersResponse:
+ """Block phone numbers
+
+ Block phone numbers for an advisor.
+
+ :param advisor_symphony_id: The symphonyId for which we are blocking the phone numbers (required)
+ :type advisor_symphony_id: str
+ :param customer_block_phone_numbers_request:
+ :type customer_block_phone_numbers_request: CustomerBlockPhoneNumbersRequest
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._block_phone_numbers_serialize(
+ advisor_symphony_id=advisor_symphony_id,
+ customer_block_phone_numbers_request=customer_block_phone_numbers_request,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "CustomerBlockPhoneNumbersResponse",
+ '403': "NotEntitledOnDirectEmp",
+ '404': "AdvisorNotFound",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ ).data
+
+
+ @validate_call
+ async def block_phone_numbers_with_http_info(
+ self,
+ advisor_symphony_id: Annotated[str, Field(strict=True, description="The symphonyId for which we are blocking the phone numbers")],
+ customer_block_phone_numbers_request: Optional[CustomerBlockPhoneNumbersRequest] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> ApiResponse[CustomerBlockPhoneNumbersResponse]:
+ """Block phone numbers
+
+ Block phone numbers for an advisor.
+
+ :param advisor_symphony_id: The symphonyId for which we are blocking the phone numbers (required)
+ :type advisor_symphony_id: str
+ :param customer_block_phone_numbers_request:
+ :type customer_block_phone_numbers_request: CustomerBlockPhoneNumbersRequest
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._block_phone_numbers_serialize(
+ advisor_symphony_id=advisor_symphony_id,
+ customer_block_phone_numbers_request=customer_block_phone_numbers_request,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "CustomerBlockPhoneNumbersResponse",
+ '403': "NotEntitledOnDirectEmp",
+ '404': "AdvisorNotFound",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ )
+
+
+ @validate_call
+ async def block_phone_numbers_without_preload_content(
+ self,
+ advisor_symphony_id: Annotated[str, Field(strict=True, description="The symphonyId for which we are blocking the phone numbers")],
+ customer_block_phone_numbers_request: Optional[CustomerBlockPhoneNumbersRequest] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RESTResponseType:
+ """Block phone numbers
+
+ Block phone numbers for an advisor.
+
+ :param advisor_symphony_id: The symphonyId for which we are blocking the phone numbers (required)
+ :type advisor_symphony_id: str
+ :param customer_block_phone_numbers_request:
+ :type customer_block_phone_numbers_request: CustomerBlockPhoneNumbersRequest
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._block_phone_numbers_serialize(
+ advisor_symphony_id=advisor_symphony_id,
+ customer_block_phone_numbers_request=customer_block_phone_numbers_request,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "CustomerBlockPhoneNumbersResponse",
+ '403': "NotEntitledOnDirectEmp",
+ '404': "AdvisorNotFound",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ return response_data.response
+
+
+ def _block_phone_numbers_serialize(
+ self,
+ advisor_symphony_id,
+ customer_block_phone_numbers_request,
+ _request_auth,
+ _content_type,
+ _headers,
+ _host_index,
+ ) -> RequestSerialized:
+
+ _host = None
+
+ _collection_formats: Dict[str, str] = {
+ }
+
+ _path_params: Dict[str, str] = {}
+ _query_params: List[Tuple[str, str]] = []
+ _header_params: Dict[str, Optional[str]] = _headers or {}
+ _form_params: List[Tuple[str, str]] = []
+ _files: Dict[
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
+ ] = {}
+ _body_params: Optional[bytes] = None
+
+ # process the path parameters
+ if advisor_symphony_id is not None:
+ _path_params['advisorSymphonyId'] = advisor_symphony_id
+ # process the query parameters
+ # process the header parameters
+ # process the form parameters
+ # process the body parameter
+ if customer_block_phone_numbers_request is not None:
+ _body_params = customer_block_phone_numbers_request
+
+
+ # set the HTTP header `Accept`
+ if 'Accept' not in _header_params:
+ _header_params['Accept'] = self.api_client.select_header_accept(
+ [
+ 'application/json'
+ ]
+ )
+
+ # set the HTTP header `Content-Type`
+ if _content_type:
+ _header_params['Content-Type'] = _content_type
+ else:
+ _default_content_type = (
+ self.api_client.select_header_content_type(
+ [
+ 'application/json'
+ ]
+ )
+ )
+ if _default_content_type is not None:
+ _header_params['Content-Type'] = _default_content_type
+
+ # authentication setting
+ _auth_settings: List[str] = [
+ 'sfsAuthentication'
+ ]
+
+ return self.api_client.param_serialize(
+ method='POST',
+ resource_path='/api/v1/customer/advisors/{advisorSymphonyId}/blockedPhoneNumbers',
+ path_params=_path_params,
+ query_params=_query_params,
+ header_params=_header_params,
+ body=_body_params,
+ post_params=_form_params,
+ files=_files,
+ auth_settings=_auth_settings,
+ collection_formats=_collection_formats,
+ _host=_host,
+ _request_auth=_request_auth
+ )
+
+
+
+
+ @validate_call
+ async def block_phone_numbersv2(
+ self,
+ advisor_symphony_id: Annotated[str, Field(strict=True, description="The symphonyId for which we are blocking the phone numbers")],
+ customer_block_phone_numbers_request: Optional[CustomerBlockPhoneNumbersRequest] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> CustomerBlockPhoneNumbersResponse:
+ """Block phone numbers (recommended)
+
+ Block phone numbers for an advisor.
+
+ :param advisor_symphony_id: The symphonyId for which we are blocking the phone numbers (required)
+ :type advisor_symphony_id: str
+ :param customer_block_phone_numbers_request:
+ :type customer_block_phone_numbers_request: CustomerBlockPhoneNumbersRequest
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._block_phone_numbersv2_serialize(
+ advisor_symphony_id=advisor_symphony_id,
+ customer_block_phone_numbers_request=customer_block_phone_numbers_request,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "CustomerBlockPhoneNumbersResponse",
+ '403': "NotEntitledOnDirectEmp",
+ '404': "AdvisorNotFound",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ ).data
+
+
+ @validate_call
+ async def block_phone_numbersv2_with_http_info(
+ self,
+ advisor_symphony_id: Annotated[str, Field(strict=True, description="The symphonyId for which we are blocking the phone numbers")],
+ customer_block_phone_numbers_request: Optional[CustomerBlockPhoneNumbersRequest] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> ApiResponse[CustomerBlockPhoneNumbersResponse]:
+ """Block phone numbers (recommended)
+
+ Block phone numbers for an advisor.
+
+ :param advisor_symphony_id: The symphonyId for which we are blocking the phone numbers (required)
+ :type advisor_symphony_id: str
+ :param customer_block_phone_numbers_request:
+ :type customer_block_phone_numbers_request: CustomerBlockPhoneNumbersRequest
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._block_phone_numbersv2_serialize(
+ advisor_symphony_id=advisor_symphony_id,
+ customer_block_phone_numbers_request=customer_block_phone_numbers_request,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "CustomerBlockPhoneNumbersResponse",
+ '403': "NotEntitledOnDirectEmp",
+ '404': "AdvisorNotFound",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ )
+
+
+ @validate_call
+ async def block_phone_numbersv2_without_preload_content(
+ self,
+ advisor_symphony_id: Annotated[str, Field(strict=True, description="The symphonyId for which we are blocking the phone numbers")],
+ customer_block_phone_numbers_request: Optional[CustomerBlockPhoneNumbersRequest] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RESTResponseType:
+ """Block phone numbers (recommended)
+
+ Block phone numbers for an advisor.
+
+ :param advisor_symphony_id: The symphonyId for which we are blocking the phone numbers (required)
+ :type advisor_symphony_id: str
+ :param customer_block_phone_numbers_request:
+ :type customer_block_phone_numbers_request: CustomerBlockPhoneNumbersRequest
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._block_phone_numbersv2_serialize(
+ advisor_symphony_id=advisor_symphony_id,
+ customer_block_phone_numbers_request=customer_block_phone_numbers_request,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "CustomerBlockPhoneNumbersResponse",
+ '403': "NotEntitledOnDirectEmp",
+ '404': "AdvisorNotFound",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ return response_data.response
+
+
+ def _block_phone_numbersv2_serialize(
+ self,
+ advisor_symphony_id,
+ customer_block_phone_numbers_request,
+ _request_auth,
+ _content_type,
+ _headers,
+ _host_index,
+ ) -> RequestSerialized:
+
+ _host = None
+
+ _collection_formats: Dict[str, str] = {
+ }
+
+ _path_params: Dict[str, str] = {}
+ _query_params: List[Tuple[str, str]] = []
+ _header_params: Dict[str, Optional[str]] = _headers or {}
+ _form_params: List[Tuple[str, str]] = []
+ _files: Dict[
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
+ ] = {}
+ _body_params: Optional[bytes] = None
+
+ # process the path parameters
+ if advisor_symphony_id is not None:
+ _path_params['advisorSymphonyId'] = advisor_symphony_id
+ # process the query parameters
+ # process the header parameters
+ # process the form parameters
+ # process the body parameter
+ if customer_block_phone_numbers_request is not None:
+ _body_params = customer_block_phone_numbers_request
+
+
+ # set the HTTP header `Accept`
+ if 'Accept' not in _header_params:
+ _header_params['Accept'] = self.api_client.select_header_accept(
+ [
+ 'application/json'
+ ]
+ )
+
+ # set the HTTP header `Content-Type`
+ if _content_type:
+ _header_params['Content-Type'] = _content_type
+ else:
+ _default_content_type = (
+ self.api_client.select_header_content_type(
+ [
+ 'application/json'
+ ]
+ )
+ )
+ if _default_content_type is not None:
+ _header_params['Content-Type'] = _default_content_type
+
+ # authentication setting
+ _auth_settings: List[str] = [
+ 'sfsAuthentication'
+ ]
+
+ return self.api_client.param_serialize(
+ method='POST',
+ resource_path='/api/v2/customer/advisors/{advisorSymphonyId}/blockedPhoneNumbers',
+ path_params=_path_params,
+ query_params=_query_params,
+ header_params=_header_params,
+ body=_body_params,
+ post_params=_form_params,
+ files=_files,
+ auth_settings=_auth_settings,
+ collection_formats=_collection_formats,
+ _host=_host,
+ _request_auth=_request_auth
+ )
+
+
+
+
+ @validate_call
+ async def get_block_phone_numbers(
+ self,
+ advisor_symphony_id: Annotated[str, Field(strict=True, description="The Symphony ID for which we are getting the blocked phone numbers")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> GetBlockedPhoneNumbersResponse:
+ """Get blocked phone numbers
+
+ Get blocked phone numbers for an advisor.
+
+ :param advisor_symphony_id: The Symphony ID for which we are getting the blocked phone numbers (required)
+ :type advisor_symphony_id: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._get_block_phone_numbers_serialize(
+ advisor_symphony_id=advisor_symphony_id,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "GetBlockedPhoneNumbersResponse",
+ '403': "NotEntitledOnDirectEmp",
+ '404': "AdvisorNotFound",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ ).data
+
+
+ @validate_call
+ async def get_block_phone_numbers_with_http_info(
+ self,
+ advisor_symphony_id: Annotated[str, Field(strict=True, description="The Symphony ID for which we are getting the blocked phone numbers")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> ApiResponse[GetBlockedPhoneNumbersResponse]:
+ """Get blocked phone numbers
+
+ Get blocked phone numbers for an advisor.
+
+ :param advisor_symphony_id: The Symphony ID for which we are getting the blocked phone numbers (required)
+ :type advisor_symphony_id: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._get_block_phone_numbers_serialize(
+ advisor_symphony_id=advisor_symphony_id,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "GetBlockedPhoneNumbersResponse",
+ '403': "NotEntitledOnDirectEmp",
+ '404': "AdvisorNotFound",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ )
+
+
+ @validate_call
+ async def get_block_phone_numbers_without_preload_content(
+ self,
+ advisor_symphony_id: Annotated[str, Field(strict=True, description="The Symphony ID for which we are getting the blocked phone numbers")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RESTResponseType:
+ """Get blocked phone numbers
+
+ Get blocked phone numbers for an advisor.
+
+ :param advisor_symphony_id: The Symphony ID for which we are getting the blocked phone numbers (required)
+ :type advisor_symphony_id: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._get_block_phone_numbers_serialize(
+ advisor_symphony_id=advisor_symphony_id,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "GetBlockedPhoneNumbersResponse",
+ '403': "NotEntitledOnDirectEmp",
+ '404': "AdvisorNotFound",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ return response_data.response
+
+
+ def _get_block_phone_numbers_serialize(
+ self,
+ advisor_symphony_id,
+ _request_auth,
+ _content_type,
+ _headers,
+ _host_index,
+ ) -> RequestSerialized:
+
+ _host = None
+
+ _collection_formats: Dict[str, str] = {
+ }
+
+ _path_params: Dict[str, str] = {}
+ _query_params: List[Tuple[str, str]] = []
+ _header_params: Dict[str, Optional[str]] = _headers or {}
+ _form_params: List[Tuple[str, str]] = []
+ _files: Dict[
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
+ ] = {}
+ _body_params: Optional[bytes] = None
+
+ # process the path parameters
+ if advisor_symphony_id is not None:
+ _path_params['advisorSymphonyId'] = advisor_symphony_id
+ # process the query parameters
+ # process the header parameters
+ # process the form parameters
+ # process the body parameter
+
+
+ # set the HTTP header `Accept`
+ if 'Accept' not in _header_params:
+ _header_params['Accept'] = self.api_client.select_header_accept(
+ [
+ 'application/json'
+ ]
+ )
+
+
+ # authentication setting
+ _auth_settings: List[str] = [
+ 'sfsAuthentication'
+ ]
+
+ return self.api_client.param_serialize(
+ method='GET',
+ resource_path='/api/v1/customer/advisors/{advisorSymphonyId}/blockedPhoneNumbers',
+ path_params=_path_params,
+ query_params=_query_params,
+ header_params=_header_params,
+ body=_body_params,
+ post_params=_form_params,
+ files=_files,
+ auth_settings=_auth_settings,
+ collection_formats=_collection_formats,
+ _host=_host,
+ _request_auth=_request_auth
+ )
+
+
+
+
+ @validate_call
+ async def get_block_phone_numbersv2(
+ self,
+ advisor_symphony_id: Annotated[str, Field(strict=True, description="The Symphony ID for which we are getting the blocked phone numbers")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> GetBlockedPhoneNumbersResponse:
+ """Get blocked phone numbers (recommended)
+
+ Get blocked phone numbers for an advisor.
+
+ :param advisor_symphony_id: The Symphony ID for which we are getting the blocked phone numbers (required)
+ :type advisor_symphony_id: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._get_block_phone_numbersv2_serialize(
+ advisor_symphony_id=advisor_symphony_id,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "GetBlockedPhoneNumbersResponse",
+ '403': "NotEntitledOnDirectEmp",
+ '404': "AdvisorNotFound",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ ).data
+
+
+ @validate_call
+ async def get_block_phone_numbersv2_with_http_info(
+ self,
+ advisor_symphony_id: Annotated[str, Field(strict=True, description="The Symphony ID for which we are getting the blocked phone numbers")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> ApiResponse[GetBlockedPhoneNumbersResponse]:
+ """Get blocked phone numbers (recommended)
+
+ Get blocked phone numbers for an advisor.
+
+ :param advisor_symphony_id: The Symphony ID for which we are getting the blocked phone numbers (required)
+ :type advisor_symphony_id: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._get_block_phone_numbersv2_serialize(
+ advisor_symphony_id=advisor_symphony_id,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "GetBlockedPhoneNumbersResponse",
+ '403': "NotEntitledOnDirectEmp",
+ '404': "AdvisorNotFound",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ )
+
+
+ @validate_call
+ async def get_block_phone_numbersv2_without_preload_content(
+ self,
+ advisor_symphony_id: Annotated[str, Field(strict=True, description="The Symphony ID for which we are getting the blocked phone numbers")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RESTResponseType:
+ """Get blocked phone numbers (recommended)
+
+ Get blocked phone numbers for an advisor.
+
+ :param advisor_symphony_id: The Symphony ID for which we are getting the blocked phone numbers (required)
+ :type advisor_symphony_id: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._get_block_phone_numbersv2_serialize(
+ advisor_symphony_id=advisor_symphony_id,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "GetBlockedPhoneNumbersResponse",
+ '403': "NotEntitledOnDirectEmp",
+ '404': "AdvisorNotFound",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ return response_data.response
+
+
+ def _get_block_phone_numbersv2_serialize(
+ self,
+ advisor_symphony_id,
+ _request_auth,
+ _content_type,
+ _headers,
+ _host_index,
+ ) -> RequestSerialized:
+
+ _host = None
+
+ _collection_formats: Dict[str, str] = {
+ }
+
+ _path_params: Dict[str, str] = {}
+ _query_params: List[Tuple[str, str]] = []
+ _header_params: Dict[str, Optional[str]] = _headers or {}
+ _form_params: List[Tuple[str, str]] = []
+ _files: Dict[
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
+ ] = {}
+ _body_params: Optional[bytes] = None
+
+ # process the path parameters
+ if advisor_symphony_id is not None:
+ _path_params['advisorSymphonyId'] = advisor_symphony_id
+ # process the query parameters
+ # process the header parameters
+ # process the form parameters
+ # process the body parameter
+
+
+ # set the HTTP header `Accept`
+ if 'Accept' not in _header_params:
+ _header_params['Accept'] = self.api_client.select_header_accept(
+ [
+ 'application/json'
+ ]
+ )
+
+
+ # authentication setting
+ _auth_settings: List[str] = [
+ 'sfsAuthentication'
+ ]
+
+ return self.api_client.param_serialize(
+ method='GET',
+ resource_path='/api/v2/customer/advisors/{advisorSymphonyId}/blockedPhoneNumbers',
+ path_params=_path_params,
+ query_params=_query_params,
+ header_params=_header_params,
+ body=_body_params,
+ post_params=_form_params,
+ files=_files,
+ auth_settings=_auth_settings,
+ collection_formats=_collection_formats,
+ _host=_host,
+ _request_auth=_request_auth
+ )
+
+
+
+
+ @validate_call
+ async def unblock_phone_numbers(
+ self,
+ advisor_symphony_id: Annotated[str, Field(strict=True, description="The Symphony ID for which we are unblocking the phone numbers")],
+ phone_numbers: Annotated[List[StrictStr], Field(min_length=1, max_length=100, description="The phone numbers that we want to unblock for the specified advisor")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> CustomerBlockPhoneNumbersResponse:
+ """Unblock phone numbers
+
+ Unblock phone numbers for an advisor.
+
+ :param advisor_symphony_id: The Symphony ID for which we are unblocking the phone numbers (required)
+ :type advisor_symphony_id: str
+ :param phone_numbers: The phone numbers that we want to unblock for the specified advisor (required)
+ :type phone_numbers: List[str]
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._unblock_phone_numbers_serialize(
+ advisor_symphony_id=advisor_symphony_id,
+ phone_numbers=phone_numbers,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "CustomerBlockPhoneNumbersResponse",
+ '403': "NotEntitledOnDirectEmp",
+ '404': "AdvisorNotFound",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ ).data
+
+
+ @validate_call
+ async def unblock_phone_numbers_with_http_info(
+ self,
+ advisor_symphony_id: Annotated[str, Field(strict=True, description="The Symphony ID for which we are unblocking the phone numbers")],
+ phone_numbers: Annotated[List[StrictStr], Field(min_length=1, max_length=100, description="The phone numbers that we want to unblock for the specified advisor")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> ApiResponse[CustomerBlockPhoneNumbersResponse]:
+ """Unblock phone numbers
+
+ Unblock phone numbers for an advisor.
+
+ :param advisor_symphony_id: The Symphony ID for which we are unblocking the phone numbers (required)
+ :type advisor_symphony_id: str
+ :param phone_numbers: The phone numbers that we want to unblock for the specified advisor (required)
+ :type phone_numbers: List[str]
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._unblock_phone_numbers_serialize(
+ advisor_symphony_id=advisor_symphony_id,
+ phone_numbers=phone_numbers,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "CustomerBlockPhoneNumbersResponse",
+ '403': "NotEntitledOnDirectEmp",
+ '404': "AdvisorNotFound",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ )
+
+
+ @validate_call
+ async def unblock_phone_numbers_without_preload_content(
+ self,
+ advisor_symphony_id: Annotated[str, Field(strict=True, description="The Symphony ID for which we are unblocking the phone numbers")],
+ phone_numbers: Annotated[List[StrictStr], Field(min_length=1, max_length=100, description="The phone numbers that we want to unblock for the specified advisor")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RESTResponseType:
+ """Unblock phone numbers
+
+ Unblock phone numbers for an advisor.
+
+ :param advisor_symphony_id: The Symphony ID for which we are unblocking the phone numbers (required)
+ :type advisor_symphony_id: str
+ :param phone_numbers: The phone numbers that we want to unblock for the specified advisor (required)
+ :type phone_numbers: List[str]
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._unblock_phone_numbers_serialize(
+ advisor_symphony_id=advisor_symphony_id,
+ phone_numbers=phone_numbers,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "CustomerBlockPhoneNumbersResponse",
+ '403': "NotEntitledOnDirectEmp",
+ '404': "AdvisorNotFound",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ return response_data.response
+
+
+ def _unblock_phone_numbers_serialize(
+ self,
+ advisor_symphony_id,
+ phone_numbers,
+ _request_auth,
+ _content_type,
+ _headers,
+ _host_index,
+ ) -> RequestSerialized:
+
+ _host = None
+
+ _collection_formats: Dict[str, str] = {
+ 'phoneNumbers': 'multi',
+ }
+
+ _path_params: Dict[str, str] = {}
+ _query_params: List[Tuple[str, str]] = []
+ _header_params: Dict[str, Optional[str]] = _headers or {}
+ _form_params: List[Tuple[str, str]] = []
+ _files: Dict[
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
+ ] = {}
+ _body_params: Optional[bytes] = None
+
+ # process the path parameters
+ if advisor_symphony_id is not None:
+ _path_params['advisorSymphonyId'] = advisor_symphony_id
+ # process the query parameters
+ if phone_numbers is not None:
+
+ _query_params.append(('phoneNumbers', phone_numbers))
+
+ # process the header parameters
+ # process the form parameters
+ # process the body parameter
+
+
+ # set the HTTP header `Accept`
+ if 'Accept' not in _header_params:
+ _header_params['Accept'] = self.api_client.select_header_accept(
+ [
+ 'application/json'
+ ]
+ )
+
+
+ # authentication setting
+ _auth_settings: List[str] = [
+ 'sfsAuthentication'
+ ]
+
+ return self.api_client.param_serialize(
+ method='DELETE',
+ resource_path='/api/v1/customer/advisors/{advisorSymphonyId}/blockedPhoneNumbers',
+ path_params=_path_params,
+ query_params=_query_params,
+ header_params=_header_params,
+ body=_body_params,
+ post_params=_form_params,
+ files=_files,
+ auth_settings=_auth_settings,
+ collection_formats=_collection_formats,
+ _host=_host,
+ _request_auth=_request_auth
+ )
+
+
+
+
+ @validate_call
+ async def unblock_phone_numbersv2(
+ self,
+ advisor_symphony_id: Annotated[str, Field(strict=True, description="The Symphony ID for which we are unblocking the phone numbers")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> CustomerBlockPhoneNumbersResponse:
+ """Unblock phone numbers (recommended)
+
+ Unblock phone numbers for an advisor.
+
+ :param advisor_symphony_id: The Symphony ID for which we are unblocking the phone numbers (required)
+ :type advisor_symphony_id: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._unblock_phone_numbersv2_serialize(
+ advisor_symphony_id=advisor_symphony_id,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "CustomerBlockPhoneNumbersResponse",
+ '403': "NotEntitledOnDirectEmp",
+ '404': "AdvisorNotFound",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ ).data
+
+
+ @validate_call
+ async def unblock_phone_numbersv2_with_http_info(
+ self,
+ advisor_symphony_id: Annotated[str, Field(strict=True, description="The Symphony ID for which we are unblocking the phone numbers")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> ApiResponse[CustomerBlockPhoneNumbersResponse]:
+ """Unblock phone numbers (recommended)
+
+ Unblock phone numbers for an advisor.
+
+ :param advisor_symphony_id: The Symphony ID for which we are unblocking the phone numbers (required)
+ :type advisor_symphony_id: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._unblock_phone_numbersv2_serialize(
+ advisor_symphony_id=advisor_symphony_id,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "CustomerBlockPhoneNumbersResponse",
+ '403': "NotEntitledOnDirectEmp",
+ '404': "AdvisorNotFound",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ )
+
+
+ @validate_call
+ async def unblock_phone_numbersv2_without_preload_content(
+ self,
+ advisor_symphony_id: Annotated[str, Field(strict=True, description="The Symphony ID for which we are unblocking the phone numbers")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RESTResponseType:
+ """Unblock phone numbers (recommended)
+
+ Unblock phone numbers for an advisor.
+
+ :param advisor_symphony_id: The Symphony ID for which we are unblocking the phone numbers (required)
+ :type advisor_symphony_id: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._unblock_phone_numbersv2_serialize(
+ advisor_symphony_id=advisor_symphony_id,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "CustomerBlockPhoneNumbersResponse",
+ '403': "NotEntitledOnDirectEmp",
+ '404': "AdvisorNotFound",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ return response_data.response
+
+
+ def _unblock_phone_numbersv2_serialize(
+ self,
+ advisor_symphony_id,
+ _request_auth,
+ _content_type,
+ _headers,
+ _host_index,
+ ) -> RequestSerialized:
+
+ _host = None
+
+ _collection_formats: Dict[str, str] = {
+ }
+
+ _path_params: Dict[str, str] = {}
+ _query_params: List[Tuple[str, str]] = []
+ _header_params: Dict[str, Optional[str]] = _headers or {}
+ _form_params: List[Tuple[str, str]] = []
+ _files: Dict[
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
+ ] = {}
+ _body_params: Optional[bytes] = None
+
+ # process the path parameters
+ if advisor_symphony_id is not None:
+ _path_params['advisorSymphonyId'] = advisor_symphony_id
+ # process the query parameters
+ # process the header parameters
+ # process the form parameters
+ # process the body parameter
+
+
+ # set the HTTP header `Accept`
+ if 'Accept' not in _header_params:
+ _header_params['Accept'] = self.api_client.select_header_accept(
+ [
+ 'application/json'
+ ]
+ )
+
+
+ # authentication setting
+ _auth_settings: List[str] = [
+ 'sfsAuthentication'
+ ]
+
+ return self.api_client.param_serialize(
+ method='DELETE',
+ resource_path='/api/v2/customer/advisors/{advisorSymphonyId}/blockedPhoneNumbers',
+ path_params=_path_params,
+ query_params=_query_params,
+ header_params=_header_params,
+ body=_body_params,
+ post_params=_form_params,
+ files=_files,
+ auth_settings=_auth_settings,
+ collection_formats=_collection_formats,
+ _host=_host,
+ _request_auth=_request_auth
+ )
+
+
diff --git a/symphony/bdk/gen/federation_api/customer_contact_api.py b/symphony/bdk/gen/federation_api/customer_contact_api.py
new file mode 100644
index 00000000..1b9e1c32
--- /dev/null
+++ b/symphony/bdk/gen/federation_api/customer_contact_api.py
@@ -0,0 +1,623 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+import warnings
+from pydantic import validate_call, Field, StrictFloat, StrictStr, StrictInt
+from typing import Any, Dict, List, Optional, Tuple, Union
+from typing_extensions import Annotated
+
+from pydantic import Field, StrictStr, field_validator
+from typing import List, Optional
+from typing_extensions import Annotated
+from symphony.bdk.gen.federation_model.list_emp_channel_connector_response import ListEmpChannelConnectorResponse
+from symphony.bdk.gen.federation_model.search_contacts_response import SearchContactsResponse
+
+from symphony.bdk.gen.api_client import ApiClient, RequestSerialized
+from symphony.bdk.gen.api_response import ApiResponse
+from symphony.bdk.gen.rest import RESTResponseType
+
+
+class CustomerContactApi:
+ """NOTE: This class is auto generated by OpenAPI Generator
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+ """
+
+ def __init__(self, api_client=None) -> None:
+ if api_client is None:
+ api_client = ApiClient.get_default()
+ self.api_client = api_client
+
+
+ @validate_call
+ async def list_available_emp_channel_connectors(
+ self,
+ external_network: Annotated[str, Field(min_length=1, strict=True, description="The external network: LINE or WHATSAPP or SMS")],
+ symphony_id: Annotated[Optional[List[Annotated[str, Field(strict=True)]]], Field(description="Contacts' Symphony IDs")] = None,
+ federation_group_id: Annotated[Optional[StrictStr], Field(description="Federation group ID")] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> ListEmpChannelConnectorResponse:
+ """List EMP connectors available for one or multiple contacts
+
+ List the EMP connectors available for one or multiple contacts by Symphony IDs \\ EMP connector corresponds to \\ - Official accounts for LINE - Business APIs for WhatsApp - Phone numbers for SMS
+
+ :param external_network: The external network: LINE or WHATSAPP or SMS (required)
+ :type external_network: str
+ :param symphony_id: Contacts' Symphony IDs
+ :type symphony_id: List[str]
+ :param federation_group_id: Federation group ID
+ :type federation_group_id: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._list_available_emp_channel_connectors_serialize(
+ external_network=external_network,
+ symphony_id=symphony_id,
+ federation_group_id=federation_group_id,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "ListEmpChannelConnectorResponse",
+ '404': "ListAvailableEmpChannelConnectors404Response",
+ '403': "FederationGroupEmpForbidden",
+ '406': "NotApplicableForExternalNetwork",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ ).data
+
+
+ @validate_call
+ async def list_available_emp_channel_connectors_with_http_info(
+ self,
+ external_network: Annotated[str, Field(min_length=1, strict=True, description="The external network: LINE or WHATSAPP or SMS")],
+ symphony_id: Annotated[Optional[List[Annotated[str, Field(strict=True)]]], Field(description="Contacts' Symphony IDs")] = None,
+ federation_group_id: Annotated[Optional[StrictStr], Field(description="Federation group ID")] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> ApiResponse[ListEmpChannelConnectorResponse]:
+ """List EMP connectors available for one or multiple contacts
+
+ List the EMP connectors available for one or multiple contacts by Symphony IDs \\ EMP connector corresponds to \\ - Official accounts for LINE - Business APIs for WhatsApp - Phone numbers for SMS
+
+ :param external_network: The external network: LINE or WHATSAPP or SMS (required)
+ :type external_network: str
+ :param symphony_id: Contacts' Symphony IDs
+ :type symphony_id: List[str]
+ :param federation_group_id: Federation group ID
+ :type federation_group_id: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._list_available_emp_channel_connectors_serialize(
+ external_network=external_network,
+ symphony_id=symphony_id,
+ federation_group_id=federation_group_id,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "ListEmpChannelConnectorResponse",
+ '404': "ListAvailableEmpChannelConnectors404Response",
+ '403': "FederationGroupEmpForbidden",
+ '406': "NotApplicableForExternalNetwork",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ )
+
+
+ @validate_call
+ async def list_available_emp_channel_connectors_without_preload_content(
+ self,
+ external_network: Annotated[str, Field(min_length=1, strict=True, description="The external network: LINE or WHATSAPP or SMS")],
+ symphony_id: Annotated[Optional[List[Annotated[str, Field(strict=True)]]], Field(description="Contacts' Symphony IDs")] = None,
+ federation_group_id: Annotated[Optional[StrictStr], Field(description="Federation group ID")] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RESTResponseType:
+ """List EMP connectors available for one or multiple contacts
+
+ List the EMP connectors available for one or multiple contacts by Symphony IDs \\ EMP connector corresponds to \\ - Official accounts for LINE - Business APIs for WhatsApp - Phone numbers for SMS
+
+ :param external_network: The external network: LINE or WHATSAPP or SMS (required)
+ :type external_network: str
+ :param symphony_id: Contacts' Symphony IDs
+ :type symphony_id: List[str]
+ :param federation_group_id: Federation group ID
+ :type federation_group_id: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._list_available_emp_channel_connectors_serialize(
+ external_network=external_network,
+ symphony_id=symphony_id,
+ federation_group_id=federation_group_id,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "ListEmpChannelConnectorResponse",
+ '404': "ListAvailableEmpChannelConnectors404Response",
+ '403': "FederationGroupEmpForbidden",
+ '406': "NotApplicableForExternalNetwork",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ return response_data.response
+
+
+ def _list_available_emp_channel_connectors_serialize(
+ self,
+ external_network,
+ symphony_id,
+ federation_group_id,
+ _request_auth,
+ _content_type,
+ _headers,
+ _host_index,
+ ) -> RequestSerialized:
+
+ _host = None
+
+ _collection_formats: Dict[str, str] = {
+ 'symphonyId': 'multi',
+ }
+
+ _path_params: Dict[str, str] = {}
+ _query_params: List[Tuple[str, str]] = []
+ _header_params: Dict[str, Optional[str]] = _headers or {}
+ _form_params: List[Tuple[str, str]] = []
+ _files: Dict[
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
+ ] = {}
+ _body_params: Optional[bytes] = None
+
+ # process the path parameters
+ if external_network is not None:
+ _path_params['externalNetwork'] = external_network
+ # process the query parameters
+ if symphony_id is not None:
+
+ _query_params.append(('symphonyId', symphony_id))
+
+ if federation_group_id is not None:
+
+ _query_params.append(('federationGroupId', federation_group_id))
+
+ # process the header parameters
+ # process the form parameters
+ # process the body parameter
+
+
+ # set the HTTP header `Accept`
+ if 'Accept' not in _header_params:
+ _header_params['Accept'] = self.api_client.select_header_accept(
+ [
+ 'application/json'
+ ]
+ )
+
+
+ # authentication setting
+ _auth_settings: List[str] = [
+ 'sfsAuthentication'
+ ]
+
+ return self.api_client.param_serialize(
+ method='GET',
+ resource_path='/api/v1/customer/tenant/empChannelConnector/{externalNetwork}',
+ path_params=_path_params,
+ query_params=_query_params,
+ header_params=_header_params,
+ body=_body_params,
+ post_params=_form_params,
+ files=_files,
+ auth_settings=_auth_settings,
+ collection_formats=_collection_formats,
+ _host=_host,
+ _request_auth=_request_auth
+ )
+
+
+
+
+ @validate_call
+ async def search_contacts(
+ self,
+ external_network: StrictStr,
+ query: Annotated[StrictStr, Field(description="Start search by first name, then last name and then display name")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> SearchContactsResponse:
+ """Search contacts
+
+ => Search an advisor's contacts related to a given externalNetwork
+
+ :param external_network: (required)
+ :type external_network: str
+ :param query: Start search by first name, then last name and then display name (required)
+ :type query: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._search_contacts_serialize(
+ external_network=external_network,
+ query=query,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "SearchContactsResponse",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ ).data
+
+
+ @validate_call
+ async def search_contacts_with_http_info(
+ self,
+ external_network: StrictStr,
+ query: Annotated[StrictStr, Field(description="Start search by first name, then last name and then display name")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> ApiResponse[SearchContactsResponse]:
+ """Search contacts
+
+ => Search an advisor's contacts related to a given externalNetwork
+
+ :param external_network: (required)
+ :type external_network: str
+ :param query: Start search by first name, then last name and then display name (required)
+ :type query: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._search_contacts_serialize(
+ external_network=external_network,
+ query=query,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "SearchContactsResponse",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ )
+
+
+ @validate_call
+ async def search_contacts_without_preload_content(
+ self,
+ external_network: StrictStr,
+ query: Annotated[StrictStr, Field(description="Start search by first name, then last name and then display name")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RESTResponseType:
+ """Search contacts
+
+ => Search an advisor's contacts related to a given externalNetwork
+
+ :param external_network: (required)
+ :type external_network: str
+ :param query: Start search by first name, then last name and then display name (required)
+ :type query: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._search_contacts_serialize(
+ external_network=external_network,
+ query=query,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "SearchContactsResponse",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ return response_data.response
+
+
+ def _search_contacts_serialize(
+ self,
+ external_network,
+ query,
+ _request_auth,
+ _content_type,
+ _headers,
+ _host_index,
+ ) -> RequestSerialized:
+
+ _host = None
+
+ _collection_formats: Dict[str, str] = {
+ }
+
+ _path_params: Dict[str, str] = {}
+ _query_params: List[Tuple[str, str]] = []
+ _header_params: Dict[str, Optional[str]] = _headers or {}
+ _form_params: List[Tuple[str, str]] = []
+ _files: Dict[
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
+ ] = {}
+ _body_params: Optional[bytes] = None
+
+ # process the path parameters
+ if external_network is not None:
+ _path_params['externalNetwork'] = external_network
+ # process the query parameters
+ if query is not None:
+
+ _query_params.append(('query', query))
+
+ # process the header parameters
+ # process the form parameters
+ # process the body parameter
+
+
+ # set the HTTP header `Accept`
+ if 'Accept' not in _header_params:
+ _header_params['Accept'] = self.api_client.select_header_accept(
+ [
+ 'application/json'
+ ]
+ )
+
+
+ # authentication setting
+ _auth_settings: List[str] = [
+ 'sfsAuthentication'
+ ]
+
+ return self.api_client.param_serialize(
+ method='GET',
+ resource_path='/api/v1/customer/contacts/externalNetwork/{externalNetwork}/search',
+ path_params=_path_params,
+ query_params=_query_params,
+ header_params=_header_params,
+ body=_body_params,
+ post_params=_form_params,
+ files=_files,
+ auth_settings=_auth_settings,
+ collection_formats=_collection_formats,
+ _host=_host,
+ _request_auth=_request_auth
+ )
+
+
diff --git a/symphony/bdk/gen/federation_api/customer_invite_api.py b/symphony/bdk/gen/federation_api/customer_invite_api.py
new file mode 100644
index 00000000..9b9563f7
--- /dev/null
+++ b/symphony/bdk/gen/federation_api/customer_invite_api.py
@@ -0,0 +1,324 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+import warnings
+from pydantic import validate_call, Field, StrictFloat, StrictStr, StrictInt
+from typing import Any, Dict, List, Optional, Tuple, Union
+from typing_extensions import Annotated
+
+from decimal import Decimal
+from pydantic import Field
+from typing_extensions import Annotated
+from symphony.bdk.gen.federation_model.resend_invite_response import ResendInviteResponse
+
+from symphony.bdk.gen.api_client import ApiClient, RequestSerialized
+from symphony.bdk.gen.api_response import ApiResponse
+from symphony.bdk.gen.rest import RESTResponseType
+
+
+class CustomerInviteApi:
+ """NOTE: This class is auto generated by OpenAPI Generator
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+ """
+
+ def __init__(self, api_client=None) -> None:
+ if api_client is None:
+ api_client = ApiClient.get_default()
+ self.api_client = api_client
+
+
+ @validate_call
+ async def resend_invite(
+ self,
+ contact_symphony_id: Annotated[Decimal, Field(description="Contact's Symphony user ID")],
+ advisor_symphony_id: Annotated[Decimal, Field(description="Onboarder's Symphony user ID")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> ResendInviteResponse:
+ """Resend a new onboarding invitation to contact
+
+ Only applicable for networks requiring onboarding invitations: WeChat, LINE.
Sends a new onboarding invitation to the contact with the onboarding instructions and a new authentication one-time-password token, if applicable.
Required to reset the contact's invitation after it expires. The invitation expiry counter (7 days) is reset to zero and the status is changed from \"Expired\" to \"Pending\".
LINE since 23.04: If the user enters an expired one-time-password token within the first 7 days they were onboarded, they automatically receive a new valid token.
After the 7 days, calling this api is required to reset the user invitation status and to generate a new token.
+
+ :param contact_symphony_id: Contact's Symphony user ID (required)
+ :type contact_symphony_id: decimal.Decimal
+ :param advisor_symphony_id: Onboarder's Symphony user ID (required)
+ :type advisor_symphony_id: decimal.Decimal
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._resend_invite_serialize(
+ contact_symphony_id=contact_symphony_id,
+ advisor_symphony_id=advisor_symphony_id,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "ResendInviteResponse",
+ '400': "ResendInvite400Response",
+ '404': "ContactNotFound",
+ '500': "ResendInviteFailed",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ ).data
+
+
+ @validate_call
+ async def resend_invite_with_http_info(
+ self,
+ contact_symphony_id: Annotated[Decimal, Field(description="Contact's Symphony user ID")],
+ advisor_symphony_id: Annotated[Decimal, Field(description="Onboarder's Symphony user ID")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> ApiResponse[ResendInviteResponse]:
+ """Resend a new onboarding invitation to contact
+
+ Only applicable for networks requiring onboarding invitations: WeChat, LINE.
Sends a new onboarding invitation to the contact with the onboarding instructions and a new authentication one-time-password token, if applicable.
Required to reset the contact's invitation after it expires. The invitation expiry counter (7 days) is reset to zero and the status is changed from \"Expired\" to \"Pending\".
LINE since 23.04: If the user enters an expired one-time-password token within the first 7 days they were onboarded, they automatically receive a new valid token.
After the 7 days, calling this api is required to reset the user invitation status and to generate a new token.
+
+ :param contact_symphony_id: Contact's Symphony user ID (required)
+ :type contact_symphony_id: decimal.Decimal
+ :param advisor_symphony_id: Onboarder's Symphony user ID (required)
+ :type advisor_symphony_id: decimal.Decimal
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._resend_invite_serialize(
+ contact_symphony_id=contact_symphony_id,
+ advisor_symphony_id=advisor_symphony_id,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "ResendInviteResponse",
+ '400': "ResendInvite400Response",
+ '404': "ContactNotFound",
+ '500': "ResendInviteFailed",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ )
+
+
+ @validate_call
+ async def resend_invite_without_preload_content(
+ self,
+ contact_symphony_id: Annotated[Decimal, Field(description="Contact's Symphony user ID")],
+ advisor_symphony_id: Annotated[Decimal, Field(description="Onboarder's Symphony user ID")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RESTResponseType:
+ """Resend a new onboarding invitation to contact
+
+ Only applicable for networks requiring onboarding invitations: WeChat, LINE.
Sends a new onboarding invitation to the contact with the onboarding instructions and a new authentication one-time-password token, if applicable.
Required to reset the contact's invitation after it expires. The invitation expiry counter (7 days) is reset to zero and the status is changed from \"Expired\" to \"Pending\".
LINE since 23.04: If the user enters an expired one-time-password token within the first 7 days they were onboarded, they automatically receive a new valid token.
After the 7 days, calling this api is required to reset the user invitation status and to generate a new token.
+
+ :param contact_symphony_id: Contact's Symphony user ID (required)
+ :type contact_symphony_id: decimal.Decimal
+ :param advisor_symphony_id: Onboarder's Symphony user ID (required)
+ :type advisor_symphony_id: decimal.Decimal
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._resend_invite_serialize(
+ contact_symphony_id=contact_symphony_id,
+ advisor_symphony_id=advisor_symphony_id,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "ResendInviteResponse",
+ '400': "ResendInvite400Response",
+ '404': "ContactNotFound",
+ '500': "ResendInviteFailed",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ return response_data.response
+
+
+ def _resend_invite_serialize(
+ self,
+ contact_symphony_id,
+ advisor_symphony_id,
+ _request_auth,
+ _content_type,
+ _headers,
+ _host_index,
+ ) -> RequestSerialized:
+
+ _host = None
+
+ _collection_formats: Dict[str, str] = {
+ }
+
+ _path_params: Dict[str, str] = {}
+ _query_params: List[Tuple[str, str]] = []
+ _header_params: Dict[str, Optional[str]] = _headers or {}
+ _form_params: List[Tuple[str, str]] = []
+ _files: Dict[
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
+ ] = {}
+ _body_params: Optional[bytes] = None
+
+ # process the path parameters
+ if contact_symphony_id is not None:
+ _path_params['contactSymphonyId'] = contact_symphony_id
+ if advisor_symphony_id is not None:
+ _path_params['advisorSymphonyId'] = advisor_symphony_id
+ # process the query parameters
+ # process the header parameters
+ # process the form parameters
+ # process the body parameter
+
+
+ # set the HTTP header `Accept`
+ if 'Accept' not in _header_params:
+ _header_params['Accept'] = self.api_client.select_header_accept(
+ [
+ 'application/json'
+ ]
+ )
+
+
+ # authentication setting
+ _auth_settings: List[str] = [
+ 'sfsAuthentication'
+ ]
+
+ return self.api_client.param_serialize(
+ method='POST',
+ resource_path='/api/v1/customer/contacts/{contactSymphonyId}/advisor/{advisorSymphonyId}/resendInvite',
+ path_params=_path_params,
+ query_params=_query_params,
+ header_params=_header_params,
+ body=_body_params,
+ post_params=_form_params,
+ files=_files,
+ auth_settings=_auth_settings,
+ collection_formats=_collection_formats,
+ _host=_host,
+ _request_auth=_request_auth
+ )
+
+
diff --git a/symphony/bdk/gen/federation_api/customer_number_api.py b/symphony/bdk/gen/federation_api/customer_number_api.py
new file mode 100644
index 00000000..03d7118c
--- /dev/null
+++ b/symphony/bdk/gen/federation_api/customer_number_api.py
@@ -0,0 +1,1692 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+import warnings
+from pydantic import validate_call, Field, StrictFloat, StrictStr, StrictInt
+from typing import Any, Dict, List, Optional, Tuple, Union
+from typing_extensions import Annotated
+
+from pydantic import Field, StrictStr, field_validator
+from typing import Optional
+from typing_extensions import Annotated
+from symphony.bdk.gen.federation_model.address_request import AddressRequest
+from symphony.bdk.gen.federation_model.address_response import AddressResponse
+from symphony.bdk.gen.federation_model.number_response import NumberResponse
+from symphony.bdk.gen.federation_model.phone_number_info import PhoneNumberInfo
+from symphony.bdk.gen.federation_model.update_number_request import UpdateNumberRequest
+
+from symphony.bdk.gen.api_client import ApiClient, RequestSerialized
+from symphony.bdk.gen.api_response import ApiResponse
+from symphony.bdk.gen.rest import RESTResponseType
+
+
+class CustomerNumberApi:
+ """NOTE: This class is auto generated by OpenAPI Generator
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+ """
+
+ def __init__(self, api_client=None) -> None:
+ if api_client is None:
+ api_client = ApiClient.get_default()
+ self.api_client = api_client
+
+
+ @validate_call
+ async def get_advisor_phone_numbers(
+ self,
+ advisor_symphony_id: Annotated[str, Field(strict=True, description="Advisor's symphony ID")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> PhoneNumberInfo:
+ """Get Advisor phone number details
+
+ Get Advisor phone number details.
+
+ :param advisor_symphony_id: Advisor's symphony ID (required)
+ :type advisor_symphony_id: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._get_advisor_phone_numbers_serialize(
+ advisor_symphony_id=advisor_symphony_id,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "PhoneNumberInfo",
+ '404': "GetAdvisorPhoneNumbers404Response",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ ).data
+
+
+ @validate_call
+ async def get_advisor_phone_numbers_with_http_info(
+ self,
+ advisor_symphony_id: Annotated[str, Field(strict=True, description="Advisor's symphony ID")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> ApiResponse[PhoneNumberInfo]:
+ """Get Advisor phone number details
+
+ Get Advisor phone number details.
+
+ :param advisor_symphony_id: Advisor's symphony ID (required)
+ :type advisor_symphony_id: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._get_advisor_phone_numbers_serialize(
+ advisor_symphony_id=advisor_symphony_id,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "PhoneNumberInfo",
+ '404': "GetAdvisorPhoneNumbers404Response",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ )
+
+
+ @validate_call
+ async def get_advisor_phone_numbers_without_preload_content(
+ self,
+ advisor_symphony_id: Annotated[str, Field(strict=True, description="Advisor's symphony ID")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RESTResponseType:
+ """Get Advisor phone number details
+
+ Get Advisor phone number details.
+
+ :param advisor_symphony_id: Advisor's symphony ID (required)
+ :type advisor_symphony_id: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._get_advisor_phone_numbers_serialize(
+ advisor_symphony_id=advisor_symphony_id,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "PhoneNumberInfo",
+ '404': "GetAdvisorPhoneNumbers404Response",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ return response_data.response
+
+
+ def _get_advisor_phone_numbers_serialize(
+ self,
+ advisor_symphony_id,
+ _request_auth,
+ _content_type,
+ _headers,
+ _host_index,
+ ) -> RequestSerialized:
+
+ _host = None
+
+ _collection_formats: Dict[str, str] = {
+ }
+
+ _path_params: Dict[str, str] = {}
+ _query_params: List[Tuple[str, str]] = []
+ _header_params: Dict[str, Optional[str]] = _headers or {}
+ _form_params: List[Tuple[str, str]] = []
+ _files: Dict[
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
+ ] = {}
+ _body_params: Optional[bytes] = None
+
+ # process the path parameters
+ if advisor_symphony_id is not None:
+ _path_params['advisorSymphonyId'] = advisor_symphony_id
+ # process the query parameters
+ # process the header parameters
+ # process the form parameters
+ # process the body parameter
+
+
+ # set the HTTP header `Accept`
+ if 'Accept' not in _header_params:
+ _header_params['Accept'] = self.api_client.select_header_accept(
+ [
+ 'application/json'
+ ]
+ )
+
+
+ # authentication setting
+ _auth_settings: List[str] = [
+ 'sfsAuthentication'
+ ]
+
+ return self.api_client.param_serialize(
+ method='GET',
+ resource_path='/api/v1/customer/advisors/{advisorSymphonyId}/phone-number',
+ path_params=_path_params,
+ query_params=_query_params,
+ header_params=_header_params,
+ body=_body_params,
+ post_params=_form_params,
+ files=_files,
+ auth_settings=_auth_settings,
+ collection_formats=_collection_formats,
+ _host=_host,
+ _request_auth=_request_auth
+ )
+
+
+
+
+ @validate_call
+ async def get_phone_address(
+ self,
+ phone_number: Annotated[StrictStr, Field(description="Phone number")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> AddressResponse:
+ """Get phone address
+
+ Get phone address
+
+ :param phone_number: Phone number (required)
+ :type phone_number: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._get_phone_address_serialize(
+ phone_number=phone_number,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "AddressResponse",
+ '404': "NumberNotFound",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ ).data
+
+
+ @validate_call
+ async def get_phone_address_with_http_info(
+ self,
+ phone_number: Annotated[StrictStr, Field(description="Phone number")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> ApiResponse[AddressResponse]:
+ """Get phone address
+
+ Get phone address
+
+ :param phone_number: Phone number (required)
+ :type phone_number: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._get_phone_address_serialize(
+ phone_number=phone_number,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "AddressResponse",
+ '404': "NumberNotFound",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ )
+
+
+ @validate_call
+ async def get_phone_address_without_preload_content(
+ self,
+ phone_number: Annotated[StrictStr, Field(description="Phone number")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RESTResponseType:
+ """Get phone address
+
+ Get phone address
+
+ :param phone_number: Phone number (required)
+ :type phone_number: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._get_phone_address_serialize(
+ phone_number=phone_number,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "AddressResponse",
+ '404': "NumberNotFound",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ return response_data.response
+
+
+ def _get_phone_address_serialize(
+ self,
+ phone_number,
+ _request_auth,
+ _content_type,
+ _headers,
+ _host_index,
+ ) -> RequestSerialized:
+
+ _host = None
+
+ _collection_formats: Dict[str, str] = {
+ }
+
+ _path_params: Dict[str, str] = {}
+ _query_params: List[Tuple[str, str]] = []
+ _header_params: Dict[str, Optional[str]] = _headers or {}
+ _form_params: List[Tuple[str, str]] = []
+ _files: Dict[
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
+ ] = {}
+ _body_params: Optional[bytes] = None
+
+ # process the path parameters
+ if phone_number is not None:
+ _path_params['phoneNumber'] = phone_number
+ # process the query parameters
+ # process the header parameters
+ # process the form parameters
+ # process the body parameter
+
+
+ # set the HTTP header `Accept`
+ if 'Accept' not in _header_params:
+ _header_params['Accept'] = self.api_client.select_header_accept(
+ [
+ 'application/json'
+ ]
+ )
+
+
+ # authentication setting
+ _auth_settings: List[str] = [
+ 'sfsAuthentication'
+ ]
+
+ return self.api_client.param_serialize(
+ method='GET',
+ resource_path='/api/v1/customer/phone-number/{phoneNumber}/address',
+ path_params=_path_params,
+ query_params=_query_params,
+ header_params=_header_params,
+ body=_body_params,
+ post_params=_form_params,
+ files=_files,
+ auth_settings=_auth_settings,
+ collection_formats=_collection_formats,
+ _host=_host,
+ _request_auth=_request_auth
+ )
+
+
+
+
+ @validate_call
+ async def get_phone_number_infos(
+ self,
+ phone_number: Annotated[StrictStr, Field(description="Phone number provided by Symphony")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> NumberResponse:
+ """Get information on a phone number provided by Symphony
+
+ Get information on a phone number provided by Symphony
+
+ :param phone_number: Phone number provided by Symphony (required)
+ :type phone_number: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._get_phone_number_infos_serialize(
+ phone_number=phone_number,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "NumberResponse",
+ '404': "NumberNotFound",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ ).data
+
+
+ @validate_call
+ async def get_phone_number_infos_with_http_info(
+ self,
+ phone_number: Annotated[StrictStr, Field(description="Phone number provided by Symphony")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> ApiResponse[NumberResponse]:
+ """Get information on a phone number provided by Symphony
+
+ Get information on a phone number provided by Symphony
+
+ :param phone_number: Phone number provided by Symphony (required)
+ :type phone_number: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._get_phone_number_infos_serialize(
+ phone_number=phone_number,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "NumberResponse",
+ '404': "NumberNotFound",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ )
+
+
+ @validate_call
+ async def get_phone_number_infos_without_preload_content(
+ self,
+ phone_number: Annotated[StrictStr, Field(description="Phone number provided by Symphony")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RESTResponseType:
+ """Get information on a phone number provided by Symphony
+
+ Get information on a phone number provided by Symphony
+
+ :param phone_number: Phone number provided by Symphony (required)
+ :type phone_number: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._get_phone_number_infos_serialize(
+ phone_number=phone_number,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "NumberResponse",
+ '404': "NumberNotFound",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ return response_data.response
+
+
+ def _get_phone_number_infos_serialize(
+ self,
+ phone_number,
+ _request_auth,
+ _content_type,
+ _headers,
+ _host_index,
+ ) -> RequestSerialized:
+
+ _host = None
+
+ _collection_formats: Dict[str, str] = {
+ }
+
+ _path_params: Dict[str, str] = {}
+ _query_params: List[Tuple[str, str]] = []
+ _header_params: Dict[str, Optional[str]] = _headers or {}
+ _form_params: List[Tuple[str, str]] = []
+ _files: Dict[
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
+ ] = {}
+ _body_params: Optional[bytes] = None
+
+ # process the path parameters
+ if phone_number is not None:
+ _path_params['phoneNumber'] = phone_number
+ # process the query parameters
+ # process the header parameters
+ # process the form parameters
+ # process the body parameter
+
+
+ # set the HTTP header `Accept`
+ if 'Accept' not in _header_params:
+ _header_params['Accept'] = self.api_client.select_header_accept(
+ [
+ 'application/json'
+ ]
+ )
+
+
+ # authentication setting
+ _auth_settings: List[str] = [
+ 'sfsAuthentication'
+ ]
+
+ return self.api_client.param_serialize(
+ method='GET',
+ resource_path='/api/v1/customer/phone-number/{phoneNumber}',
+ path_params=_path_params,
+ query_params=_query_params,
+ header_params=_header_params,
+ body=_body_params,
+ post_params=_form_params,
+ files=_files,
+ auth_settings=_auth_settings,
+ collection_formats=_collection_formats,
+ _host=_host,
+ _request_auth=_request_auth
+ )
+
+
+
+
+ @validate_call
+ async def remove_phone_address(
+ self,
+ phone_number: Annotated[StrictStr, Field(description="Phone number")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> None:
+ """Remove phone number's address
+
+ Remove phone number's address
+
+ :param phone_number: Phone number (required)
+ :type phone_number: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._remove_phone_address_serialize(
+ phone_number=phone_number,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '204': None,
+ '404': "NumberNotFound",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ ).data
+
+
+ @validate_call
+ async def remove_phone_address_with_http_info(
+ self,
+ phone_number: Annotated[StrictStr, Field(description="Phone number")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> ApiResponse[None]:
+ """Remove phone number's address
+
+ Remove phone number's address
+
+ :param phone_number: Phone number (required)
+ :type phone_number: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._remove_phone_address_serialize(
+ phone_number=phone_number,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '204': None,
+ '404': "NumberNotFound",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ )
+
+
+ @validate_call
+ async def remove_phone_address_without_preload_content(
+ self,
+ phone_number: Annotated[StrictStr, Field(description="Phone number")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RESTResponseType:
+ """Remove phone number's address
+
+ Remove phone number's address
+
+ :param phone_number: Phone number (required)
+ :type phone_number: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._remove_phone_address_serialize(
+ phone_number=phone_number,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '204': None,
+ '404': "NumberNotFound",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ return response_data.response
+
+
+ def _remove_phone_address_serialize(
+ self,
+ phone_number,
+ _request_auth,
+ _content_type,
+ _headers,
+ _host_index,
+ ) -> RequestSerialized:
+
+ _host = None
+
+ _collection_formats: Dict[str, str] = {
+ }
+
+ _path_params: Dict[str, str] = {}
+ _query_params: List[Tuple[str, str]] = []
+ _header_params: Dict[str, Optional[str]] = _headers or {}
+ _form_params: List[Tuple[str, str]] = []
+ _files: Dict[
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
+ ] = {}
+ _body_params: Optional[bytes] = None
+
+ # process the path parameters
+ if phone_number is not None:
+ _path_params['phoneNumber'] = phone_number
+ # process the query parameters
+ # process the header parameters
+ # process the form parameters
+ # process the body parameter
+
+
+ # set the HTTP header `Accept`
+ if 'Accept' not in _header_params:
+ _header_params['Accept'] = self.api_client.select_header_accept(
+ [
+ 'application/json'
+ ]
+ )
+
+
+ # authentication setting
+ _auth_settings: List[str] = [
+ 'sfsAuthentication'
+ ]
+
+ return self.api_client.param_serialize(
+ method='DELETE',
+ resource_path='/api/v1/customer/phone-number/{phoneNumber}/address',
+ path_params=_path_params,
+ query_params=_query_params,
+ header_params=_header_params,
+ body=_body_params,
+ post_params=_form_params,
+ files=_files,
+ auth_settings=_auth_settings,
+ collection_formats=_collection_formats,
+ _host=_host,
+ _request_auth=_request_auth
+ )
+
+
+
+
+ @validate_call
+ async def update_phone_address(
+ self,
+ phone_number: Annotated[StrictStr, Field(description="Phone number")],
+ address_request: Optional[AddressRequest] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> AddressResponse:
+ """Update phone number's address
+
+ Update phone number's address
+
+ :param phone_number: Phone number (required)
+ :type phone_number: str
+ :param address_request:
+ :type address_request: AddressRequest
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._update_phone_address_serialize(
+ phone_number=phone_number,
+ address_request=address_request,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '204': "AddressResponse",
+ '400': "NoFieldUpdated",
+ '404': "NumberNotFound",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ ).data
+
+
+ @validate_call
+ async def update_phone_address_with_http_info(
+ self,
+ phone_number: Annotated[StrictStr, Field(description="Phone number")],
+ address_request: Optional[AddressRequest] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> ApiResponse[AddressResponse]:
+ """Update phone number's address
+
+ Update phone number's address
+
+ :param phone_number: Phone number (required)
+ :type phone_number: str
+ :param address_request:
+ :type address_request: AddressRequest
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._update_phone_address_serialize(
+ phone_number=phone_number,
+ address_request=address_request,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '204': "AddressResponse",
+ '400': "NoFieldUpdated",
+ '404': "NumberNotFound",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ )
+
+
+ @validate_call
+ async def update_phone_address_without_preload_content(
+ self,
+ phone_number: Annotated[StrictStr, Field(description="Phone number")],
+ address_request: Optional[AddressRequest] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RESTResponseType:
+ """Update phone number's address
+
+ Update phone number's address
+
+ :param phone_number: Phone number (required)
+ :type phone_number: str
+ :param address_request:
+ :type address_request: AddressRequest
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._update_phone_address_serialize(
+ phone_number=phone_number,
+ address_request=address_request,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '204': "AddressResponse",
+ '400': "NoFieldUpdated",
+ '404': "NumberNotFound",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ return response_data.response
+
+
+ def _update_phone_address_serialize(
+ self,
+ phone_number,
+ address_request,
+ _request_auth,
+ _content_type,
+ _headers,
+ _host_index,
+ ) -> RequestSerialized:
+
+ _host = None
+
+ _collection_formats: Dict[str, str] = {
+ }
+
+ _path_params: Dict[str, str] = {}
+ _query_params: List[Tuple[str, str]] = []
+ _header_params: Dict[str, Optional[str]] = _headers or {}
+ _form_params: List[Tuple[str, str]] = []
+ _files: Dict[
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
+ ] = {}
+ _body_params: Optional[bytes] = None
+
+ # process the path parameters
+ if phone_number is not None:
+ _path_params['phoneNumber'] = phone_number
+ # process the query parameters
+ # process the header parameters
+ # process the form parameters
+ # process the body parameter
+ if address_request is not None:
+ _body_params = address_request
+
+
+ # set the HTTP header `Accept`
+ if 'Accept' not in _header_params:
+ _header_params['Accept'] = self.api_client.select_header_accept(
+ [
+ 'application/json'
+ ]
+ )
+
+ # set the HTTP header `Content-Type`
+ if _content_type:
+ _header_params['Content-Type'] = _content_type
+ else:
+ _default_content_type = (
+ self.api_client.select_header_content_type(
+ [
+ 'application/json'
+ ]
+ )
+ )
+ if _default_content_type is not None:
+ _header_params['Content-Type'] = _default_content_type
+
+ # authentication setting
+ _auth_settings: List[str] = [
+ 'sfsAuthentication'
+ ]
+
+ return self.api_client.param_serialize(
+ method='PUT',
+ resource_path='/api/v1/customer/phone-number/{phoneNumber}/address',
+ path_params=_path_params,
+ query_params=_query_params,
+ header_params=_header_params,
+ body=_body_params,
+ post_params=_form_params,
+ files=_files,
+ auth_settings=_auth_settings,
+ collection_formats=_collection_formats,
+ _host=_host,
+ _request_auth=_request_auth
+ )
+
+
+
+
+ @validate_call
+ async def update_phone_number(
+ self,
+ phone_number: Annotated[StrictStr, Field(description="The phone number to update.")],
+ update_number_request: Optional[UpdateNumberRequest] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> NumberResponse:
+ """Update a phone number
+
+ This endpoint allows to update an existing phone number. Currently, the following operations are supported: - Unassign a phone number from an advisor (making it \"on hold\"). - Assign a phone number to a new advisor.
+
+ :param phone_number: The phone number to update. (required)
+ :type phone_number: str
+ :param update_number_request:
+ :type update_number_request: UpdateNumberRequest
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._update_phone_number_serialize(
+ phone_number=phone_number,
+ update_number_request=update_number_request,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "NumberResponse",
+ '400': "SymphonyUserNotFoundProblem",
+ '403': "UpdatePhoneNumber403Response",
+ '404': "NumberNotFound",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ ).data
+
+
+ @validate_call
+ async def update_phone_number_with_http_info(
+ self,
+ phone_number: Annotated[StrictStr, Field(description="The phone number to update.")],
+ update_number_request: Optional[UpdateNumberRequest] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> ApiResponse[NumberResponse]:
+ """Update a phone number
+
+ This endpoint allows to update an existing phone number. Currently, the following operations are supported: - Unassign a phone number from an advisor (making it \"on hold\"). - Assign a phone number to a new advisor.
+
+ :param phone_number: The phone number to update. (required)
+ :type phone_number: str
+ :param update_number_request:
+ :type update_number_request: UpdateNumberRequest
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._update_phone_number_serialize(
+ phone_number=phone_number,
+ update_number_request=update_number_request,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "NumberResponse",
+ '400': "SymphonyUserNotFoundProblem",
+ '403': "UpdatePhoneNumber403Response",
+ '404': "NumberNotFound",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ )
+
+
+ @validate_call
+ async def update_phone_number_without_preload_content(
+ self,
+ phone_number: Annotated[StrictStr, Field(description="The phone number to update.")],
+ update_number_request: Optional[UpdateNumberRequest] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RESTResponseType:
+ """Update a phone number
+
+ This endpoint allows to update an existing phone number. Currently, the following operations are supported: - Unassign a phone number from an advisor (making it \"on hold\"). - Assign a phone number to a new advisor.
+
+ :param phone_number: The phone number to update. (required)
+ :type phone_number: str
+ :param update_number_request:
+ :type update_number_request: UpdateNumberRequest
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._update_phone_number_serialize(
+ phone_number=phone_number,
+ update_number_request=update_number_request,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "NumberResponse",
+ '400': "SymphonyUserNotFoundProblem",
+ '403': "UpdatePhoneNumber403Response",
+ '404': "NumberNotFound",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ return response_data.response
+
+
+ def _update_phone_number_serialize(
+ self,
+ phone_number,
+ update_number_request,
+ _request_auth,
+ _content_type,
+ _headers,
+ _host_index,
+ ) -> RequestSerialized:
+
+ _host = None
+
+ _collection_formats: Dict[str, str] = {
+ }
+
+ _path_params: Dict[str, str] = {}
+ _query_params: List[Tuple[str, str]] = []
+ _header_params: Dict[str, Optional[str]] = _headers or {}
+ _form_params: List[Tuple[str, str]] = []
+ _files: Dict[
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
+ ] = {}
+ _body_params: Optional[bytes] = None
+
+ # process the path parameters
+ if phone_number is not None:
+ _path_params['phoneNumber'] = phone_number
+ # process the query parameters
+ # process the header parameters
+ # process the form parameters
+ # process the body parameter
+ if update_number_request is not None:
+ _body_params = update_number_request
+
+
+ # set the HTTP header `Accept`
+ if 'Accept' not in _header_params:
+ _header_params['Accept'] = self.api_client.select_header_accept(
+ [
+ 'application/json'
+ ]
+ )
+
+ # set the HTTP header `Content-Type`
+ if _content_type:
+ _header_params['Content-Type'] = _content_type
+ else:
+ _default_content_type = (
+ self.api_client.select_header_content_type(
+ [
+ 'application/json'
+ ]
+ )
+ )
+ if _default_content_type is not None:
+ _header_params['Content-Type'] = _default_content_type
+
+ # authentication setting
+ _auth_settings: List[str] = [
+ 'sfsAuthentication'
+ ]
+
+ return self.api_client.param_serialize(
+ method='PUT',
+ resource_path='/api/v1/customer/phone-number/{phoneNumber}',
+ path_params=_path_params,
+ query_params=_query_params,
+ header_params=_header_params,
+ body=_body_params,
+ post_params=_form_params,
+ files=_files,
+ auth_settings=_auth_settings,
+ collection_formats=_collection_formats,
+ _host=_host,
+ _request_auth=_request_auth
+ )
+
+
diff --git a/symphony/bdk/gen/federation_api/customer_phone_number_api.py b/symphony/bdk/gen/federation_api/customer_phone_number_api.py
new file mode 100644
index 00000000..ebc59527
--- /dev/null
+++ b/symphony/bdk/gen/federation_api/customer_phone_number_api.py
@@ -0,0 +1,353 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+import warnings
+from pydantic import validate_call, Field, StrictFloat, StrictStr, StrictInt
+from typing import Any, Dict, List, Optional, Tuple, Union
+from typing_extensions import Annotated
+
+from pydantic import Field, StrictStr
+from typing import Optional
+from typing_extensions import Annotated
+from symphony.bdk.gen.federation_model.phone_numbers_details_response import PhoneNumbersDetailsResponse
+
+from symphony.bdk.gen.api_client import ApiClient, RequestSerialized
+from symphony.bdk.gen.api_response import ApiResponse
+from symphony.bdk.gen.rest import RESTResponseType
+
+
+class CustomerPhoneNumberApi:
+ """NOTE: This class is auto generated by OpenAPI Generator
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+ """
+
+ def __init__(self, api_client=None) -> None:
+ if api_client is None:
+ api_client = ApiClient.get_default()
+ self.api_client = api_client
+
+
+ @validate_call
+ async def get_phone_numbers(
+ self,
+ status: Annotated[Optional[StrictStr], Field(description="filter on the phone number status either - USED - FREE - RELEASED - ON_HOLD ")] = None,
+ provider: Annotated[Optional[StrictStr], Field(description="filter on the provider - UMONY - CUSTOMER_SUPPLIED ")] = None,
+ product: Annotated[Optional[StrictStr], Field(description="filter on the product - VOICE - SMS - PRE_ALLOCATED_NUMBER - PRE_ALLOCATED_FULL - SECOND_NUMBER - SECOND_NUMBER_FULL ")] = None,
+ sub_network: Annotated[Optional[StrictStr], Field(description="filter on the subnetwork: - SECOND-NUMBER - IN-NETWORK ")] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> PhoneNumbersDetailsResponse:
+ """Get phone number details
+
+ Get phone numbers.
+
+ :param status: filter on the phone number status either - USED - FREE - RELEASED - ON_HOLD
+ :type status: str
+ :param provider: filter on the provider - UMONY - CUSTOMER_SUPPLIED
+ :type provider: str
+ :param product: filter on the product - VOICE - SMS - PRE_ALLOCATED_NUMBER - PRE_ALLOCATED_FULL - SECOND_NUMBER - SECOND_NUMBER_FULL
+ :type product: str
+ :param sub_network: filter on the subnetwork: - SECOND-NUMBER - IN-NETWORK
+ :type sub_network: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._get_phone_numbers_serialize(
+ status=status,
+ provider=provider,
+ product=product,
+ sub_network=sub_network,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "PhoneNumbersDetailsResponse",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ ).data
+
+
+ @validate_call
+ async def get_phone_numbers_with_http_info(
+ self,
+ status: Annotated[Optional[StrictStr], Field(description="filter on the phone number status either - USED - FREE - RELEASED - ON_HOLD ")] = None,
+ provider: Annotated[Optional[StrictStr], Field(description="filter on the provider - UMONY - CUSTOMER_SUPPLIED ")] = None,
+ product: Annotated[Optional[StrictStr], Field(description="filter on the product - VOICE - SMS - PRE_ALLOCATED_NUMBER - PRE_ALLOCATED_FULL - SECOND_NUMBER - SECOND_NUMBER_FULL ")] = None,
+ sub_network: Annotated[Optional[StrictStr], Field(description="filter on the subnetwork: - SECOND-NUMBER - IN-NETWORK ")] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> ApiResponse[PhoneNumbersDetailsResponse]:
+ """Get phone number details
+
+ Get phone numbers.
+
+ :param status: filter on the phone number status either - USED - FREE - RELEASED - ON_HOLD
+ :type status: str
+ :param provider: filter on the provider - UMONY - CUSTOMER_SUPPLIED
+ :type provider: str
+ :param product: filter on the product - VOICE - SMS - PRE_ALLOCATED_NUMBER - PRE_ALLOCATED_FULL - SECOND_NUMBER - SECOND_NUMBER_FULL
+ :type product: str
+ :param sub_network: filter on the subnetwork: - SECOND-NUMBER - IN-NETWORK
+ :type sub_network: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._get_phone_numbers_serialize(
+ status=status,
+ provider=provider,
+ product=product,
+ sub_network=sub_network,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "PhoneNumbersDetailsResponse",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ )
+
+
+ @validate_call
+ async def get_phone_numbers_without_preload_content(
+ self,
+ status: Annotated[Optional[StrictStr], Field(description="filter on the phone number status either - USED - FREE - RELEASED - ON_HOLD ")] = None,
+ provider: Annotated[Optional[StrictStr], Field(description="filter on the provider - UMONY - CUSTOMER_SUPPLIED ")] = None,
+ product: Annotated[Optional[StrictStr], Field(description="filter on the product - VOICE - SMS - PRE_ALLOCATED_NUMBER - PRE_ALLOCATED_FULL - SECOND_NUMBER - SECOND_NUMBER_FULL ")] = None,
+ sub_network: Annotated[Optional[StrictStr], Field(description="filter on the subnetwork: - SECOND-NUMBER - IN-NETWORK ")] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RESTResponseType:
+ """Get phone number details
+
+ Get phone numbers.
+
+ :param status: filter on the phone number status either - USED - FREE - RELEASED - ON_HOLD
+ :type status: str
+ :param provider: filter on the provider - UMONY - CUSTOMER_SUPPLIED
+ :type provider: str
+ :param product: filter on the product - VOICE - SMS - PRE_ALLOCATED_NUMBER - PRE_ALLOCATED_FULL - SECOND_NUMBER - SECOND_NUMBER_FULL
+ :type product: str
+ :param sub_network: filter on the subnetwork: - SECOND-NUMBER - IN-NETWORK
+ :type sub_network: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._get_phone_numbers_serialize(
+ status=status,
+ provider=provider,
+ product=product,
+ sub_network=sub_network,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "PhoneNumbersDetailsResponse",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ return response_data.response
+
+
+ def _get_phone_numbers_serialize(
+ self,
+ status,
+ provider,
+ product,
+ sub_network,
+ _request_auth,
+ _content_type,
+ _headers,
+ _host_index,
+ ) -> RequestSerialized:
+
+ _host = None
+
+ _collection_formats: Dict[str, str] = {
+ }
+
+ _path_params: Dict[str, str] = {}
+ _query_params: List[Tuple[str, str]] = []
+ _header_params: Dict[str, Optional[str]] = _headers or {}
+ _form_params: List[Tuple[str, str]] = []
+ _files: Dict[
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
+ ] = {}
+ _body_params: Optional[bytes] = None
+
+ # process the path parameters
+ # process the query parameters
+ if status is not None:
+
+ _query_params.append(('status', status))
+
+ if provider is not None:
+
+ _query_params.append(('provider', provider))
+
+ if product is not None:
+
+ _query_params.append(('product', product))
+
+ if sub_network is not None:
+
+ _query_params.append(('subNetwork', sub_network))
+
+ # process the header parameters
+ # process the form parameters
+ # process the body parameter
+
+
+ # set the HTTP header `Accept`
+ if 'Accept' not in _header_params:
+ _header_params['Accept'] = self.api_client.select_header_accept(
+ [
+ 'application/json'
+ ]
+ )
+
+
+ # authentication setting
+ _auth_settings: List[str] = [
+ 'sfsAuthentication'
+ ]
+
+ return self.api_client.param_serialize(
+ method='GET',
+ resource_path='/api/v1/customer/phone-numbers',
+ path_params=_path_params,
+ query_params=_query_params,
+ header_params=_header_params,
+ body=_body_params,
+ post_params=_form_params,
+ files=_files,
+ auth_settings=_auth_settings,
+ collection_formats=_collection_formats,
+ _host=_host,
+ _request_auth=_request_auth
+ )
+
+
diff --git a/symphony/bdk/gen/federation_api/customer_pre_entitlements_api.py b/symphony/bdk/gen/federation_api/customer_pre_entitlements_api.py
new file mode 100644
index 00000000..5bf2a554
--- /dev/null
+++ b/symphony/bdk/gen/federation_api/customer_pre_entitlements_api.py
@@ -0,0 +1,646 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+import warnings
+from pydantic import validate_call, Field, StrictFloat, StrictStr, StrictInt
+from typing import Any, Dict, List, Optional, Tuple, Union
+from typing_extensions import Annotated
+
+from pydantic import Field, StrictStr, field_validator
+from typing import Optional
+from typing_extensions import Annotated
+from symphony.bdk.gen.federation_model.pre_entitlement_request import PreEntitlementRequest
+
+from symphony.bdk.gen.api_client import ApiClient, RequestSerialized
+from symphony.bdk.gen.api_response import ApiResponse
+from symphony.bdk.gen.rest import RESTResponseType
+
+
+class CustomerPreEntitlementsApi:
+ """NOTE: This class is auto generated by OpenAPI Generator
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+ """
+
+ def __init__(self, api_client=None) -> None:
+ if api_client is None:
+ api_client = ApiClient.get_default()
+ self.api_client = api_client
+
+
+ @validate_call
+ async def add_pre_entitlement(
+ self,
+ symphony_id: Annotated[str, Field(strict=True, description="Symphony User Id")],
+ external_network: Annotated[StrictStr, Field(description="External network: WHATSAPP-DIRECT")],
+ pre_entitlement_request: Optional[PreEntitlementRequest] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> None:
+ """(Deprecated) (deprecated) Pre-entitle an advisor to a phone number (WhatsApp Direct only)
+
+ Pre-allocate a phone number to an advisor to allow the advisor to activate their phone number. Supported on WhatsApp Direct only Umony numbers are not eligible for pre-entitlements. Symphony users using Umony numbers can skip the pre-entitlement step and be entitled directly.
+
+ :param symphony_id: Symphony User Id (required)
+ :type symphony_id: str
+ :param external_network: External network: WHATSAPP-DIRECT (required)
+ :type external_network: str
+ :param pre_entitlement_request:
+ :type pre_entitlement_request: PreEntitlementRequest
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+ warnings.warn("POST /api/v1/customer/pre-entitlements/{symphonyId}/externalNetwork/{externalNetwork} is deprecated.", DeprecationWarning)
+
+ _param = self._add_pre_entitlement_serialize(
+ symphony_id=symphony_id,
+ external_network=external_network,
+ pre_entitlement_request=pre_entitlement_request,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': None,
+ '409': "AddPreEntitlement409Response",
+ '404': "TenantConfigurationNotFound",
+ '400': "AddPreEntitlement400Response",
+ '500': "PreEntitlementFailed",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ ).data
+
+
+ @validate_call
+ async def add_pre_entitlement_with_http_info(
+ self,
+ symphony_id: Annotated[str, Field(strict=True, description="Symphony User Id")],
+ external_network: Annotated[StrictStr, Field(description="External network: WHATSAPP-DIRECT")],
+ pre_entitlement_request: Optional[PreEntitlementRequest] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> ApiResponse[None]:
+ """(Deprecated) (deprecated) Pre-entitle an advisor to a phone number (WhatsApp Direct only)
+
+ Pre-allocate a phone number to an advisor to allow the advisor to activate their phone number. Supported on WhatsApp Direct only Umony numbers are not eligible for pre-entitlements. Symphony users using Umony numbers can skip the pre-entitlement step and be entitled directly.
+
+ :param symphony_id: Symphony User Id (required)
+ :type symphony_id: str
+ :param external_network: External network: WHATSAPP-DIRECT (required)
+ :type external_network: str
+ :param pre_entitlement_request:
+ :type pre_entitlement_request: PreEntitlementRequest
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+ warnings.warn("POST /api/v1/customer/pre-entitlements/{symphonyId}/externalNetwork/{externalNetwork} is deprecated.", DeprecationWarning)
+
+ _param = self._add_pre_entitlement_serialize(
+ symphony_id=symphony_id,
+ external_network=external_network,
+ pre_entitlement_request=pre_entitlement_request,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': None,
+ '409': "AddPreEntitlement409Response",
+ '404': "TenantConfigurationNotFound",
+ '400': "AddPreEntitlement400Response",
+ '500': "PreEntitlementFailed",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ )
+
+
+ @validate_call
+ async def add_pre_entitlement_without_preload_content(
+ self,
+ symphony_id: Annotated[str, Field(strict=True, description="Symphony User Id")],
+ external_network: Annotated[StrictStr, Field(description="External network: WHATSAPP-DIRECT")],
+ pre_entitlement_request: Optional[PreEntitlementRequest] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RESTResponseType:
+ """(Deprecated) (deprecated) Pre-entitle an advisor to a phone number (WhatsApp Direct only)
+
+ Pre-allocate a phone number to an advisor to allow the advisor to activate their phone number. Supported on WhatsApp Direct only Umony numbers are not eligible for pre-entitlements. Symphony users using Umony numbers can skip the pre-entitlement step and be entitled directly.
+
+ :param symphony_id: Symphony User Id (required)
+ :type symphony_id: str
+ :param external_network: External network: WHATSAPP-DIRECT (required)
+ :type external_network: str
+ :param pre_entitlement_request:
+ :type pre_entitlement_request: PreEntitlementRequest
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+ warnings.warn("POST /api/v1/customer/pre-entitlements/{symphonyId}/externalNetwork/{externalNetwork} is deprecated.", DeprecationWarning)
+
+ _param = self._add_pre_entitlement_serialize(
+ symphony_id=symphony_id,
+ external_network=external_network,
+ pre_entitlement_request=pre_entitlement_request,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': None,
+ '409': "AddPreEntitlement409Response",
+ '404': "TenantConfigurationNotFound",
+ '400': "AddPreEntitlement400Response",
+ '500': "PreEntitlementFailed",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ return response_data.response
+
+
+ def _add_pre_entitlement_serialize(
+ self,
+ symphony_id,
+ external_network,
+ pre_entitlement_request,
+ _request_auth,
+ _content_type,
+ _headers,
+ _host_index,
+ ) -> RequestSerialized:
+
+ _host = None
+
+ _collection_formats: Dict[str, str] = {
+ }
+
+ _path_params: Dict[str, str] = {}
+ _query_params: List[Tuple[str, str]] = []
+ _header_params: Dict[str, Optional[str]] = _headers or {}
+ _form_params: List[Tuple[str, str]] = []
+ _files: Dict[
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
+ ] = {}
+ _body_params: Optional[bytes] = None
+
+ # process the path parameters
+ if symphony_id is not None:
+ _path_params['symphonyId'] = symphony_id
+ if external_network is not None:
+ _path_params['externalNetwork'] = external_network
+ # process the query parameters
+ # process the header parameters
+ # process the form parameters
+ # process the body parameter
+ if pre_entitlement_request is not None:
+ _body_params = pre_entitlement_request
+
+
+ # set the HTTP header `Accept`
+ if 'Accept' not in _header_params:
+ _header_params['Accept'] = self.api_client.select_header_accept(
+ [
+ 'application/json'
+ ]
+ )
+
+ # set the HTTP header `Content-Type`
+ if _content_type:
+ _header_params['Content-Type'] = _content_type
+ else:
+ _default_content_type = (
+ self.api_client.select_header_content_type(
+ [
+ 'application/json'
+ ]
+ )
+ )
+ if _default_content_type is not None:
+ _header_params['Content-Type'] = _default_content_type
+
+ # authentication setting
+ _auth_settings: List[str] = [
+ 'sfsAuthentication'
+ ]
+
+ return self.api_client.param_serialize(
+ method='POST',
+ resource_path='/api/v1/customer/pre-entitlements/{symphonyId}/externalNetwork/{externalNetwork}',
+ path_params=_path_params,
+ query_params=_query_params,
+ header_params=_header_params,
+ body=_body_params,
+ post_params=_form_params,
+ files=_files,
+ auth_settings=_auth_settings,
+ collection_formats=_collection_formats,
+ _host=_host,
+ _request_auth=_request_auth
+ )
+
+
+
+
+ @validate_call
+ async def remove_pre_entitlement(
+ self,
+ symphony_id: Annotated[str, Field(strict=True, description="Symphony User Id")],
+ external_network: Annotated[StrictStr, Field(description="External network: WHATSAPP-DIRECT")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> None:
+ """(Deprecated) (deprecated) Remove an advisor pre-entitlement (WhatsApp Direct only)
+
+ Remove an advisor pre-entitlement Supported on WhatsApp Direct only
+
+ :param symphony_id: Symphony User Id (required)
+ :type symphony_id: str
+ :param external_network: External network: WHATSAPP-DIRECT (required)
+ :type external_network: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+ warnings.warn("DELETE /api/v1/customer/pre-entitlements/{symphonyId}/externalNetwork/{externalNetwork} is deprecated.", DeprecationWarning)
+
+ _param = self._remove_pre_entitlement_serialize(
+ symphony_id=symphony_id,
+ external_network=external_network,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': None,
+ '404': "RemovePreEntitlement404Response",
+ '403': "AdvisorAlreadyEntitled",
+ '400': "EntitlementTypeNotFoundProblem",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ ).data
+
+
+ @validate_call
+ async def remove_pre_entitlement_with_http_info(
+ self,
+ symphony_id: Annotated[str, Field(strict=True, description="Symphony User Id")],
+ external_network: Annotated[StrictStr, Field(description="External network: WHATSAPP-DIRECT")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> ApiResponse[None]:
+ """(Deprecated) (deprecated) Remove an advisor pre-entitlement (WhatsApp Direct only)
+
+ Remove an advisor pre-entitlement Supported on WhatsApp Direct only
+
+ :param symphony_id: Symphony User Id (required)
+ :type symphony_id: str
+ :param external_network: External network: WHATSAPP-DIRECT (required)
+ :type external_network: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+ warnings.warn("DELETE /api/v1/customer/pre-entitlements/{symphonyId}/externalNetwork/{externalNetwork} is deprecated.", DeprecationWarning)
+
+ _param = self._remove_pre_entitlement_serialize(
+ symphony_id=symphony_id,
+ external_network=external_network,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': None,
+ '404': "RemovePreEntitlement404Response",
+ '403': "AdvisorAlreadyEntitled",
+ '400': "EntitlementTypeNotFoundProblem",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ )
+
+
+ @validate_call
+ async def remove_pre_entitlement_without_preload_content(
+ self,
+ symphony_id: Annotated[str, Field(strict=True, description="Symphony User Id")],
+ external_network: Annotated[StrictStr, Field(description="External network: WHATSAPP-DIRECT")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RESTResponseType:
+ """(Deprecated) (deprecated) Remove an advisor pre-entitlement (WhatsApp Direct only)
+
+ Remove an advisor pre-entitlement Supported on WhatsApp Direct only
+
+ :param symphony_id: Symphony User Id (required)
+ :type symphony_id: str
+ :param external_network: External network: WHATSAPP-DIRECT (required)
+ :type external_network: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+ warnings.warn("DELETE /api/v1/customer/pre-entitlements/{symphonyId}/externalNetwork/{externalNetwork} is deprecated.", DeprecationWarning)
+
+ _param = self._remove_pre_entitlement_serialize(
+ symphony_id=symphony_id,
+ external_network=external_network,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': None,
+ '404': "RemovePreEntitlement404Response",
+ '403': "AdvisorAlreadyEntitled",
+ '400': "EntitlementTypeNotFoundProblem",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ return response_data.response
+
+
+ def _remove_pre_entitlement_serialize(
+ self,
+ symphony_id,
+ external_network,
+ _request_auth,
+ _content_type,
+ _headers,
+ _host_index,
+ ) -> RequestSerialized:
+
+ _host = None
+
+ _collection_formats: Dict[str, str] = {
+ }
+
+ _path_params: Dict[str, str] = {}
+ _query_params: List[Tuple[str, str]] = []
+ _header_params: Dict[str, Optional[str]] = _headers or {}
+ _form_params: List[Tuple[str, str]] = []
+ _files: Dict[
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
+ ] = {}
+ _body_params: Optional[bytes] = None
+
+ # process the path parameters
+ if symphony_id is not None:
+ _path_params['symphonyId'] = symphony_id
+ if external_network is not None:
+ _path_params['externalNetwork'] = external_network
+ # process the query parameters
+ # process the header parameters
+ # process the form parameters
+ # process the body parameter
+
+
+ # set the HTTP header `Accept`
+ if 'Accept' not in _header_params:
+ _header_params['Accept'] = self.api_client.select_header_accept(
+ [
+ 'application/json'
+ ]
+ )
+
+
+ # authentication setting
+ _auth_settings: List[str] = [
+ 'sfsAuthentication'
+ ]
+
+ return self.api_client.param_serialize(
+ method='DELETE',
+ resource_path='/api/v1/customer/pre-entitlements/{symphonyId}/externalNetwork/{externalNetwork}',
+ path_params=_path_params,
+ query_params=_query_params,
+ header_params=_header_params,
+ body=_body_params,
+ post_params=_form_params,
+ files=_files,
+ auth_settings=_auth_settings,
+ collection_formats=_collection_formats,
+ _host=_host,
+ _request_auth=_request_auth
+ )
+
+
diff --git a/symphony/bdk/gen/federation_api/customer_room_api.py b/symphony/bdk/gen/federation_api/customer_room_api.py
new file mode 100644
index 00000000..d3470dbb
--- /dev/null
+++ b/symphony/bdk/gen/federation_api/customer_room_api.py
@@ -0,0 +1,338 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+import warnings
+from pydantic import validate_call, Field, StrictFloat, StrictStr, StrictInt
+from typing import Any, Dict, List, Optional, Tuple, Union
+from typing_extensions import Annotated
+
+from pydantic import Field, StrictStr
+from typing import Optional
+from typing_extensions import Annotated
+from symphony.bdk.gen.federation_model.room_set_activity_request import RoomSetActivityRequest
+from symphony.bdk.gen.federation_model.room_set_activity_response import RoomSetActivityResponse
+
+from symphony.bdk.gen.api_client import ApiClient, RequestSerialized
+from symphony.bdk.gen.api_response import ApiResponse
+from symphony.bdk.gen.rest import RESTResponseType
+
+
+class CustomerRoomApi:
+ """NOTE: This class is auto generated by OpenAPI Generator
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+ """
+
+ def __init__(self, api_client=None) -> None:
+ if api_client is None:
+ api_client = ApiClient.get_default()
+ self.api_client = api_client
+
+
+ @validate_call
+ async def update_room_activity(
+ self,
+ stream_id: Annotated[StrictStr, Field(description="Room's streamId.
The streamID needs to be URLsafe Base64.
To obtain the URLSafe Base64 Conversation ID: - Replace forward slashes / with underscores _
- Replace pluses + with minuses -
- Ignore any trailing equal signs =
For example, the URLSafe Base64 encoding of: lX1hwfmQ+AK/k/a/BB0y2n///q2+0KfbdA== converts to lX1hwfmQ-AK_k_a_BB0y2n___q2-0KfbdA. ")],
+ room_set_activity_request: Optional[RoomSetActivityRequest] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RoomSetActivityResponse:
+ """Update room activity
+
+ Update room activity room by stream ID
+
+ :param stream_id: Room's streamId.
The streamID needs to be URLsafe Base64.
To obtain the URLSafe Base64 Conversation ID: - Replace forward slashes / with underscores _
- Replace pluses + with minuses -
- Ignore any trailing equal signs =
For example, the URLSafe Base64 encoding of: lX1hwfmQ+AK/k/a/BB0y2n///q2+0KfbdA== converts to lX1hwfmQ-AK_k_a_BB0y2n___q2-0KfbdA. (required)
+ :type stream_id: str
+ :param room_set_activity_request:
+ :type room_set_activity_request: RoomSetActivityRequest
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._update_room_activity_serialize(
+ stream_id=stream_id,
+ room_set_activity_request=room_set_activity_request,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "RoomSetActivityResponse",
+ '404': "RoomNotFound",
+ '500': "UpdateRoomStatusFailed",
+ '501': "ReactivateRoomNotImplemented",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ ).data
+
+
+ @validate_call
+ async def update_room_activity_with_http_info(
+ self,
+ stream_id: Annotated[StrictStr, Field(description="Room's streamId.
The streamID needs to be URLsafe Base64.
To obtain the URLSafe Base64 Conversation ID: - Replace forward slashes / with underscores _
- Replace pluses + with minuses -
- Ignore any trailing equal signs =
For example, the URLSafe Base64 encoding of: lX1hwfmQ+AK/k/a/BB0y2n///q2+0KfbdA== converts to lX1hwfmQ-AK_k_a_BB0y2n___q2-0KfbdA. ")],
+ room_set_activity_request: Optional[RoomSetActivityRequest] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> ApiResponse[RoomSetActivityResponse]:
+ """Update room activity
+
+ Update room activity room by stream ID
+
+ :param stream_id: Room's streamId.
The streamID needs to be URLsafe Base64.
To obtain the URLSafe Base64 Conversation ID: - Replace forward slashes / with underscores _
- Replace pluses + with minuses -
- Ignore any trailing equal signs =
For example, the URLSafe Base64 encoding of: lX1hwfmQ+AK/k/a/BB0y2n///q2+0KfbdA== converts to lX1hwfmQ-AK_k_a_BB0y2n___q2-0KfbdA. (required)
+ :type stream_id: str
+ :param room_set_activity_request:
+ :type room_set_activity_request: RoomSetActivityRequest
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._update_room_activity_serialize(
+ stream_id=stream_id,
+ room_set_activity_request=room_set_activity_request,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "RoomSetActivityResponse",
+ '404': "RoomNotFound",
+ '500': "UpdateRoomStatusFailed",
+ '501': "ReactivateRoomNotImplemented",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ )
+
+
+ @validate_call
+ async def update_room_activity_without_preload_content(
+ self,
+ stream_id: Annotated[StrictStr, Field(description="Room's streamId.
The streamID needs to be URLsafe Base64.
To obtain the URLSafe Base64 Conversation ID: - Replace forward slashes / with underscores _
- Replace pluses + with minuses -
- Ignore any trailing equal signs =
For example, the URLSafe Base64 encoding of: lX1hwfmQ+AK/k/a/BB0y2n///q2+0KfbdA== converts to lX1hwfmQ-AK_k_a_BB0y2n___q2-0KfbdA. ")],
+ room_set_activity_request: Optional[RoomSetActivityRequest] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RESTResponseType:
+ """Update room activity
+
+ Update room activity room by stream ID
+
+ :param stream_id: Room's streamId.
The streamID needs to be URLsafe Base64.
To obtain the URLSafe Base64 Conversation ID: - Replace forward slashes / with underscores _
- Replace pluses + with minuses -
- Ignore any trailing equal signs =
For example, the URLSafe Base64 encoding of: lX1hwfmQ+AK/k/a/BB0y2n///q2+0KfbdA== converts to lX1hwfmQ-AK_k_a_BB0y2n___q2-0KfbdA. (required)
+ :type stream_id: str
+ :param room_set_activity_request:
+ :type room_set_activity_request: RoomSetActivityRequest
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._update_room_activity_serialize(
+ stream_id=stream_id,
+ room_set_activity_request=room_set_activity_request,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "RoomSetActivityResponse",
+ '404': "RoomNotFound",
+ '500': "UpdateRoomStatusFailed",
+ '501': "ReactivateRoomNotImplemented",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ return response_data.response
+
+
+ def _update_room_activity_serialize(
+ self,
+ stream_id,
+ room_set_activity_request,
+ _request_auth,
+ _content_type,
+ _headers,
+ _host_index,
+ ) -> RequestSerialized:
+
+ _host = None
+
+ _collection_formats: Dict[str, str] = {
+ }
+
+ _path_params: Dict[str, str] = {}
+ _query_params: List[Tuple[str, str]] = []
+ _header_params: Dict[str, Optional[str]] = _headers or {}
+ _form_params: List[Tuple[str, str]] = []
+ _files: Dict[
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
+ ] = {}
+ _body_params: Optional[bytes] = None
+
+ # process the path parameters
+ if stream_id is not None:
+ _path_params['streamId'] = stream_id
+ # process the query parameters
+ # process the header parameters
+ # process the form parameters
+ # process the body parameter
+ if room_set_activity_request is not None:
+ _body_params = room_set_activity_request
+
+
+ # set the HTTP header `Accept`
+ if 'Accept' not in _header_params:
+ _header_params['Accept'] = self.api_client.select_header_accept(
+ [
+ 'application/json'
+ ]
+ )
+
+ # set the HTTP header `Content-Type`
+ if _content_type:
+ _header_params['Content-Type'] = _content_type
+ else:
+ _default_content_type = (
+ self.api_client.select_header_content_type(
+ [
+ 'application/json'
+ ]
+ )
+ )
+ if _default_content_type is not None:
+ _header_params['Content-Type'] = _default_content_type
+
+ # authentication setting
+ _auth_settings: List[str] = [
+ 'sfsAuthentication'
+ ]
+
+ return self.api_client.param_serialize(
+ method='PUT',
+ resource_path='/api/v1/customer/rooms/{streamId}/activity',
+ path_params=_path_params,
+ query_params=_query_params,
+ header_params=_header_params,
+ body=_body_params,
+ post_params=_form_params,
+ files=_files,
+ auth_settings=_auth_settings,
+ collection_formats=_collection_formats,
+ _host=_host,
+ _request_auth=_request_auth
+ )
+
+
diff --git a/symphony/bdk/gen/federation_api/entitlements_api.py b/symphony/bdk/gen/federation_api/entitlements_api.py
new file mode 100644
index 00000000..53866b7b
--- /dev/null
+++ b/symphony/bdk/gen/federation_api/entitlements_api.py
@@ -0,0 +1,2099 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+import warnings
+from pydantic import validate_call, Field, StrictFloat, StrictStr, StrictInt
+from typing import Any, Dict, List, Optional, Tuple, Union
+from typing_extensions import Annotated
+
+from pydantic import Field, StrictBool, StrictStr
+from typing import Optional
+from typing_extensions import Annotated
+from symphony.bdk.gen.federation_model.add_entitlementv2_response import AddEntitlementv2Response
+from symphony.bdk.gen.federation_model.entitled_response import EntitledResponse
+from symphony.bdk.gen.federation_model.entitlement_request import EntitlementRequest
+from symphony.bdk.gen.federation_model.entitlement_response import EntitlementResponse
+from symphony.bdk.gen.federation_model.entitlements_response import EntitlementsResponse
+
+from symphony.bdk.gen.api_client import ApiClient, RequestSerialized
+from symphony.bdk.gen.api_response import ApiResponse
+from symphony.bdk.gen.rest import RESTResponseType
+
+
+class EntitlementsApi:
+ """NOTE: This class is auto generated by OpenAPI Generator
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+ """
+
+ def __init__(self, api_client=None) -> None:
+ if api_client is None:
+ api_client = ApiClient.get_default()
+ self.api_client = api_client
+
+
+ @validate_call
+ async def add_entitlement(
+ self,
+ entitlement_request: Optional[EntitlementRequest] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> AddEntitlementv2Response:
+ """Add entitlement (recommended)
+
+ Entitle a Symphony user to use the external network.
+
+ :param entitlement_request:
+ :type entitlement_request: EntitlementRequest
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._add_entitlement_serialize(
+ entitlement_request=entitlement_request,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '201': "AddEntitlementv2Response",
+ '400': "AddEntitlement400Response",
+ '401': "Unauthorized",
+ '403': "ForbiddenEntitlementType",
+ '404': "TenantConfigurationNotFound",
+ '409': "AddEntitlement409Response",
+ '500': "NoAvailableNumber",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ ).data
+
+
+ @validate_call
+ async def add_entitlement_with_http_info(
+ self,
+ entitlement_request: Optional[EntitlementRequest] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> ApiResponse[AddEntitlementv2Response]:
+ """Add entitlement (recommended)
+
+ Entitle a Symphony user to use the external network.
+
+ :param entitlement_request:
+ :type entitlement_request: EntitlementRequest
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._add_entitlement_serialize(
+ entitlement_request=entitlement_request,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '201': "AddEntitlementv2Response",
+ '400': "AddEntitlement400Response",
+ '401': "Unauthorized",
+ '403': "ForbiddenEntitlementType",
+ '404': "TenantConfigurationNotFound",
+ '409': "AddEntitlement409Response",
+ '500': "NoAvailableNumber",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ )
+
+
+ @validate_call
+ async def add_entitlement_without_preload_content(
+ self,
+ entitlement_request: Optional[EntitlementRequest] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RESTResponseType:
+ """Add entitlement (recommended)
+
+ Entitle a Symphony user to use the external network.
+
+ :param entitlement_request:
+ :type entitlement_request: EntitlementRequest
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._add_entitlement_serialize(
+ entitlement_request=entitlement_request,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '201': "AddEntitlementv2Response",
+ '400': "AddEntitlement400Response",
+ '401': "Unauthorized",
+ '403': "ForbiddenEntitlementType",
+ '404': "TenantConfigurationNotFound",
+ '409': "AddEntitlement409Response",
+ '500': "NoAvailableNumber",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ return response_data.response
+
+
+ def _add_entitlement_serialize(
+ self,
+ entitlement_request,
+ _request_auth,
+ _content_type,
+ _headers,
+ _host_index,
+ ) -> RequestSerialized:
+
+ _host = None
+
+ _collection_formats: Dict[str, str] = {
+ }
+
+ _path_params: Dict[str, str] = {}
+ _query_params: List[Tuple[str, str]] = []
+ _header_params: Dict[str, Optional[str]] = _headers or {}
+ _form_params: List[Tuple[str, str]] = []
+ _files: Dict[
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
+ ] = {}
+ _body_params: Optional[bytes] = None
+
+ # process the path parameters
+ # process the query parameters
+ # process the header parameters
+ # process the form parameters
+ # process the body parameter
+ if entitlement_request is not None:
+ _body_params = entitlement_request
+
+
+ # set the HTTP header `Accept`
+ if 'Accept' not in _header_params:
+ _header_params['Accept'] = self.api_client.select_header_accept(
+ [
+ 'application/json'
+ ]
+ )
+
+ # set the HTTP header `Content-Type`
+ if _content_type:
+ _header_params['Content-Type'] = _content_type
+ else:
+ _default_content_type = (
+ self.api_client.select_header_content_type(
+ [
+ 'application/json'
+ ]
+ )
+ )
+ if _default_content_type is not None:
+ _header_params['Content-Type'] = _default_content_type
+
+ # authentication setting
+ _auth_settings: List[str] = [
+ 'sfsAuthentication'
+ ]
+
+ return self.api_client.param_serialize(
+ method='POST',
+ resource_path='/api/v2/customer/entitlements',
+ path_params=_path_params,
+ query_params=_query_params,
+ header_params=_header_params,
+ body=_body_params,
+ post_params=_form_params,
+ files=_files,
+ auth_settings=_auth_settings,
+ collection_formats=_collection_formats,
+ _host=_host,
+ _request_auth=_request_auth
+ )
+
+
+
+
+ @validate_call
+ async def delete_customer_entitlement(
+ self,
+ external_network: Annotated[StrictStr, Field(description="External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE")],
+ advisor_email_address: Annotated[Optional[StrictStr], Field(description="Advisor's email address")] = None,
+ advisor_symphony_id: Annotated[Optional[StrictStr], Field(description="Symphony user ID")] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> None:
+ """Remove entitlement (recommended)
+
+ Removes a given advisor's entitlement for a given external network.
Advisors can be identified using their email address or their Symphony user ID (if both are provided, the Symphony user ID will take precedence)
+
+ :param external_network: External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE (required)
+ :type external_network: str
+ :param advisor_email_address: Advisor's email address
+ :type advisor_email_address: str
+ :param advisor_symphony_id: Symphony user ID
+ :type advisor_symphony_id: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._delete_customer_entitlement_serialize(
+ external_network=external_network,
+ advisor_email_address=advisor_email_address,
+ advisor_symphony_id=advisor_symphony_id,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': None,
+ '404': "EntitlementNotFoundProblem",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ ).data
+
+
+ @validate_call
+ async def delete_customer_entitlement_with_http_info(
+ self,
+ external_network: Annotated[StrictStr, Field(description="External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE")],
+ advisor_email_address: Annotated[Optional[StrictStr], Field(description="Advisor's email address")] = None,
+ advisor_symphony_id: Annotated[Optional[StrictStr], Field(description="Symphony user ID")] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> ApiResponse[None]:
+ """Remove entitlement (recommended)
+
+ Removes a given advisor's entitlement for a given external network.
Advisors can be identified using their email address or their Symphony user ID (if both are provided, the Symphony user ID will take precedence)
+
+ :param external_network: External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE (required)
+ :type external_network: str
+ :param advisor_email_address: Advisor's email address
+ :type advisor_email_address: str
+ :param advisor_symphony_id: Symphony user ID
+ :type advisor_symphony_id: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._delete_customer_entitlement_serialize(
+ external_network=external_network,
+ advisor_email_address=advisor_email_address,
+ advisor_symphony_id=advisor_symphony_id,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': None,
+ '404': "EntitlementNotFoundProblem",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ )
+
+
+ @validate_call
+ async def delete_customer_entitlement_without_preload_content(
+ self,
+ external_network: Annotated[StrictStr, Field(description="External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE")],
+ advisor_email_address: Annotated[Optional[StrictStr], Field(description="Advisor's email address")] = None,
+ advisor_symphony_id: Annotated[Optional[StrictStr], Field(description="Symphony user ID")] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RESTResponseType:
+ """Remove entitlement (recommended)
+
+ Removes a given advisor's entitlement for a given external network.
Advisors can be identified using their email address or their Symphony user ID (if both are provided, the Symphony user ID will take precedence)
+
+ :param external_network: External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE (required)
+ :type external_network: str
+ :param advisor_email_address: Advisor's email address
+ :type advisor_email_address: str
+ :param advisor_symphony_id: Symphony user ID
+ :type advisor_symphony_id: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._delete_customer_entitlement_serialize(
+ external_network=external_network,
+ advisor_email_address=advisor_email_address,
+ advisor_symphony_id=advisor_symphony_id,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': None,
+ '404': "EntitlementNotFoundProblem",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ return response_data.response
+
+
+ def _delete_customer_entitlement_serialize(
+ self,
+ external_network,
+ advisor_email_address,
+ advisor_symphony_id,
+ _request_auth,
+ _content_type,
+ _headers,
+ _host_index,
+ ) -> RequestSerialized:
+
+ _host = None
+
+ _collection_formats: Dict[str, str] = {
+ }
+
+ _path_params: Dict[str, str] = {}
+ _query_params: List[Tuple[str, str]] = []
+ _header_params: Dict[str, Optional[str]] = _headers or {}
+ _form_params: List[Tuple[str, str]] = []
+ _files: Dict[
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
+ ] = {}
+ _body_params: Optional[bytes] = None
+
+ # process the path parameters
+ # process the query parameters
+ if advisor_email_address is not None:
+
+ _query_params.append(('advisorEmailAddress', advisor_email_address))
+
+ if advisor_symphony_id is not None:
+
+ _query_params.append(('advisorSymphonyId', advisor_symphony_id))
+
+ if external_network is not None:
+
+ _query_params.append(('externalNetwork', external_network))
+
+ # process the header parameters
+ # process the form parameters
+ # process the body parameter
+
+
+ # set the HTTP header `Accept`
+ if 'Accept' not in _header_params:
+ _header_params['Accept'] = self.api_client.select_header_accept(
+ [
+ 'application/json'
+ ]
+ )
+
+
+ # authentication setting
+ _auth_settings: List[str] = [
+ 'sfsAuthentication'
+ ]
+
+ return self.api_client.param_serialize(
+ method='DELETE',
+ resource_path='/api/v2/customer/advisor/entitlements',
+ path_params=_path_params,
+ query_params=_query_params,
+ header_params=_header_params,
+ body=_body_params,
+ post_params=_form_params,
+ files=_files,
+ auth_settings=_auth_settings,
+ collection_formats=_collection_formats,
+ _host=_host,
+ _request_auth=_request_auth
+ )
+
+
+
+
+ @validate_call
+ async def delete_customer_entitlement_by_symphony_id(
+ self,
+ symphony_id: Annotated[StrictStr, Field(description="Symphony user ID")],
+ entitlement_type: Annotated[StrictStr, Field(description="External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> None:
+ """(Deprecated) Remove an advisor's entitlement by Symphony user ID for a given external network (deprecated)
+
+ Remove an advisor's entitlement for a given external network
+
+ :param symphony_id: Symphony user ID (required)
+ :type symphony_id: str
+ :param entitlement_type: External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE (required)
+ :type entitlement_type: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+ warnings.warn("DELETE /api/v1/customer/entitlements/{symphonyId}/entitlementType/{entitlementType} is deprecated.", DeprecationWarning)
+
+ _param = self._delete_customer_entitlement_by_symphony_id_serialize(
+ symphony_id=symphony_id,
+ entitlement_type=entitlement_type,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': None,
+ '404': "EntitlementNotFoundProblem",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ ).data
+
+
+ @validate_call
+ async def delete_customer_entitlement_by_symphony_id_with_http_info(
+ self,
+ symphony_id: Annotated[StrictStr, Field(description="Symphony user ID")],
+ entitlement_type: Annotated[StrictStr, Field(description="External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> ApiResponse[None]:
+ """(Deprecated) Remove an advisor's entitlement by Symphony user ID for a given external network (deprecated)
+
+ Remove an advisor's entitlement for a given external network
+
+ :param symphony_id: Symphony user ID (required)
+ :type symphony_id: str
+ :param entitlement_type: External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE (required)
+ :type entitlement_type: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+ warnings.warn("DELETE /api/v1/customer/entitlements/{symphonyId}/entitlementType/{entitlementType} is deprecated.", DeprecationWarning)
+
+ _param = self._delete_customer_entitlement_by_symphony_id_serialize(
+ symphony_id=symphony_id,
+ entitlement_type=entitlement_type,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': None,
+ '404': "EntitlementNotFoundProblem",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ )
+
+
+ @validate_call
+ async def delete_customer_entitlement_by_symphony_id_without_preload_content(
+ self,
+ symphony_id: Annotated[StrictStr, Field(description="Symphony user ID")],
+ entitlement_type: Annotated[StrictStr, Field(description="External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RESTResponseType:
+ """(Deprecated) Remove an advisor's entitlement by Symphony user ID for a given external network (deprecated)
+
+ Remove an advisor's entitlement for a given external network
+
+ :param symphony_id: Symphony user ID (required)
+ :type symphony_id: str
+ :param entitlement_type: External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE (required)
+ :type entitlement_type: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+ warnings.warn("DELETE /api/v1/customer/entitlements/{symphonyId}/entitlementType/{entitlementType} is deprecated.", DeprecationWarning)
+
+ _param = self._delete_customer_entitlement_by_symphony_id_serialize(
+ symphony_id=symphony_id,
+ entitlement_type=entitlement_type,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': None,
+ '404': "EntitlementNotFoundProblem",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ return response_data.response
+
+
+ def _delete_customer_entitlement_by_symphony_id_serialize(
+ self,
+ symphony_id,
+ entitlement_type,
+ _request_auth,
+ _content_type,
+ _headers,
+ _host_index,
+ ) -> RequestSerialized:
+
+ _host = None
+
+ _collection_formats: Dict[str, str] = {
+ }
+
+ _path_params: Dict[str, str] = {}
+ _query_params: List[Tuple[str, str]] = []
+ _header_params: Dict[str, Optional[str]] = _headers or {}
+ _form_params: List[Tuple[str, str]] = []
+ _files: Dict[
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
+ ] = {}
+ _body_params: Optional[bytes] = None
+
+ # process the path parameters
+ if symphony_id is not None:
+ _path_params['symphonyId'] = symphony_id
+ if entitlement_type is not None:
+ _path_params['entitlementType'] = entitlement_type
+ # process the query parameters
+ # process the header parameters
+ # process the form parameters
+ # process the body parameter
+
+
+ # set the HTTP header `Accept`
+ if 'Accept' not in _header_params:
+ _header_params['Accept'] = self.api_client.select_header_accept(
+ [
+ 'application/json'
+ ]
+ )
+
+
+ # authentication setting
+ _auth_settings: List[str] = [
+ 'sfsAuthentication'
+ ]
+
+ return self.api_client.param_serialize(
+ method='DELETE',
+ resource_path='/api/v1/customer/entitlements/{symphonyId}/entitlementType/{entitlementType}',
+ path_params=_path_params,
+ query_params=_query_params,
+ header_params=_header_params,
+ body=_body_params,
+ post_params=_form_params,
+ files=_files,
+ auth_settings=_auth_settings,
+ collection_formats=_collection_formats,
+ _host=_host,
+ _request_auth=_request_auth
+ )
+
+
+
+
+ @validate_call
+ async def get_customer_entitlement(
+ self,
+ external_network: Annotated[StrictStr, Field(description="External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE")],
+ advisor_email_address: Annotated[Optional[StrictStr], Field(description="Symphony user email address")] = None,
+ advisor_symphony_id: Annotated[Optional[StrictStr], Field(description="Symphony user ID")] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> EntitlementResponse:
+ """Get an advisor's entitlement (recommended)
+
+ Check if a given advisor is entitled for a given external network.
Advisors can be identified using their email address or their Symphony user ID (if both are provided, the Symphony user ID will take precedence)
+
+ :param external_network: External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE (required)
+ :type external_network: str
+ :param advisor_email_address: Symphony user email address
+ :type advisor_email_address: str
+ :param advisor_symphony_id: Symphony user ID
+ :type advisor_symphony_id: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._get_customer_entitlement_serialize(
+ external_network=external_network,
+ advisor_email_address=advisor_email_address,
+ advisor_symphony_id=advisor_symphony_id,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "EntitlementResponse",
+ '400': "AdvisorIdNotProvided",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ '404': "EntitlementNotFoundProblem",
+ '500': "NoAvailableNumber",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ ).data
+
+
+ @validate_call
+ async def get_customer_entitlement_with_http_info(
+ self,
+ external_network: Annotated[StrictStr, Field(description="External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE")],
+ advisor_email_address: Annotated[Optional[StrictStr], Field(description="Symphony user email address")] = None,
+ advisor_symphony_id: Annotated[Optional[StrictStr], Field(description="Symphony user ID")] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> ApiResponse[EntitlementResponse]:
+ """Get an advisor's entitlement (recommended)
+
+ Check if a given advisor is entitled for a given external network.
Advisors can be identified using their email address or their Symphony user ID (if both are provided, the Symphony user ID will take precedence)
+
+ :param external_network: External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE (required)
+ :type external_network: str
+ :param advisor_email_address: Symphony user email address
+ :type advisor_email_address: str
+ :param advisor_symphony_id: Symphony user ID
+ :type advisor_symphony_id: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._get_customer_entitlement_serialize(
+ external_network=external_network,
+ advisor_email_address=advisor_email_address,
+ advisor_symphony_id=advisor_symphony_id,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "EntitlementResponse",
+ '400': "AdvisorIdNotProvided",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ '404': "EntitlementNotFoundProblem",
+ '500': "NoAvailableNumber",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ )
+
+
+ @validate_call
+ async def get_customer_entitlement_without_preload_content(
+ self,
+ external_network: Annotated[StrictStr, Field(description="External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE")],
+ advisor_email_address: Annotated[Optional[StrictStr], Field(description="Symphony user email address")] = None,
+ advisor_symphony_id: Annotated[Optional[StrictStr], Field(description="Symphony user ID")] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RESTResponseType:
+ """Get an advisor's entitlement (recommended)
+
+ Check if a given advisor is entitled for a given external network.
Advisors can be identified using their email address or their Symphony user ID (if both are provided, the Symphony user ID will take precedence)
+
+ :param external_network: External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE (required)
+ :type external_network: str
+ :param advisor_email_address: Symphony user email address
+ :type advisor_email_address: str
+ :param advisor_symphony_id: Symphony user ID
+ :type advisor_symphony_id: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._get_customer_entitlement_serialize(
+ external_network=external_network,
+ advisor_email_address=advisor_email_address,
+ advisor_symphony_id=advisor_symphony_id,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "EntitlementResponse",
+ '400': "AdvisorIdNotProvided",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ '404': "EntitlementNotFoundProblem",
+ '500': "NoAvailableNumber",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ return response_data.response
+
+
+ def _get_customer_entitlement_serialize(
+ self,
+ external_network,
+ advisor_email_address,
+ advisor_symphony_id,
+ _request_auth,
+ _content_type,
+ _headers,
+ _host_index,
+ ) -> RequestSerialized:
+
+ _host = None
+
+ _collection_formats: Dict[str, str] = {
+ }
+
+ _path_params: Dict[str, str] = {}
+ _query_params: List[Tuple[str, str]] = []
+ _header_params: Dict[str, Optional[str]] = _headers or {}
+ _form_params: List[Tuple[str, str]] = []
+ _files: Dict[
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
+ ] = {}
+ _body_params: Optional[bytes] = None
+
+ # process the path parameters
+ # process the query parameters
+ if advisor_email_address is not None:
+
+ _query_params.append(('advisorEmailAddress', advisor_email_address))
+
+ if advisor_symphony_id is not None:
+
+ _query_params.append(('advisorSymphonyId', advisor_symphony_id))
+
+ if external_network is not None:
+
+ _query_params.append(('externalNetwork', external_network))
+
+ # process the header parameters
+ # process the form parameters
+ # process the body parameter
+
+
+ # set the HTTP header `Accept`
+ if 'Accept' not in _header_params:
+ _header_params['Accept'] = self.api_client.select_header_accept(
+ [
+ 'application/json'
+ ]
+ )
+
+
+ # authentication setting
+ _auth_settings: List[str] = [
+ 'sfsAuthentication'
+ ]
+
+ return self.api_client.param_serialize(
+ method='GET',
+ resource_path='/api/v2/customer/advisor/entitlements',
+ path_params=_path_params,
+ query_params=_query_params,
+ header_params=_header_params,
+ body=_body_params,
+ post_params=_form_params,
+ files=_files,
+ auth_settings=_auth_settings,
+ collection_formats=_collection_formats,
+ _host=_host,
+ _request_auth=_request_auth
+ )
+
+
+
+
+ @validate_call
+ async def get_customer_entitlement_by_symphony_id(
+ self,
+ symphony_id: Annotated[StrictStr, Field(description="Symphony user ID")],
+ entitlement_type: Annotated[StrictStr, Field(description="External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> EntitlementResponse:
+ """(Deprecated) Get an advisor's entitlement searching by Symphony user ID for a given external network (deprecated)
+
+ Get an advisor's entitlement searching by Symphony user ID for a given external network
+
+ :param symphony_id: Symphony user ID (required)
+ :type symphony_id: str
+ :param entitlement_type: External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE (required)
+ :type entitlement_type: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+ warnings.warn("GET /api/v1/customer/entitlements/{symphonyId}/entitlementType/{entitlementType} is deprecated.", DeprecationWarning)
+
+ _param = self._get_customer_entitlement_by_symphony_id_serialize(
+ symphony_id=symphony_id,
+ entitlement_type=entitlement_type,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "EntitlementResponse",
+ '404': "EntitlementNotFoundProblem",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ ).data
+
+
+ @validate_call
+ async def get_customer_entitlement_by_symphony_id_with_http_info(
+ self,
+ symphony_id: Annotated[StrictStr, Field(description="Symphony user ID")],
+ entitlement_type: Annotated[StrictStr, Field(description="External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> ApiResponse[EntitlementResponse]:
+ """(Deprecated) Get an advisor's entitlement searching by Symphony user ID for a given external network (deprecated)
+
+ Get an advisor's entitlement searching by Symphony user ID for a given external network
+
+ :param symphony_id: Symphony user ID (required)
+ :type symphony_id: str
+ :param entitlement_type: External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE (required)
+ :type entitlement_type: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+ warnings.warn("GET /api/v1/customer/entitlements/{symphonyId}/entitlementType/{entitlementType} is deprecated.", DeprecationWarning)
+
+ _param = self._get_customer_entitlement_by_symphony_id_serialize(
+ symphony_id=symphony_id,
+ entitlement_type=entitlement_type,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "EntitlementResponse",
+ '404': "EntitlementNotFoundProblem",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ )
+
+
+ @validate_call
+ async def get_customer_entitlement_by_symphony_id_without_preload_content(
+ self,
+ symphony_id: Annotated[StrictStr, Field(description="Symphony user ID")],
+ entitlement_type: Annotated[StrictStr, Field(description="External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RESTResponseType:
+ """(Deprecated) Get an advisor's entitlement searching by Symphony user ID for a given external network (deprecated)
+
+ Get an advisor's entitlement searching by Symphony user ID for a given external network
+
+ :param symphony_id: Symphony user ID (required)
+ :type symphony_id: str
+ :param entitlement_type: External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE (required)
+ :type entitlement_type: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+ warnings.warn("GET /api/v1/customer/entitlements/{symphonyId}/entitlementType/{entitlementType} is deprecated.", DeprecationWarning)
+
+ _param = self._get_customer_entitlement_by_symphony_id_serialize(
+ symphony_id=symphony_id,
+ entitlement_type=entitlement_type,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "EntitlementResponse",
+ '404': "EntitlementNotFoundProblem",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ return response_data.response
+
+
+ def _get_customer_entitlement_by_symphony_id_serialize(
+ self,
+ symphony_id,
+ entitlement_type,
+ _request_auth,
+ _content_type,
+ _headers,
+ _host_index,
+ ) -> RequestSerialized:
+
+ _host = None
+
+ _collection_formats: Dict[str, str] = {
+ }
+
+ _path_params: Dict[str, str] = {}
+ _query_params: List[Tuple[str, str]] = []
+ _header_params: Dict[str, Optional[str]] = _headers or {}
+ _form_params: List[Tuple[str, str]] = []
+ _files: Dict[
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
+ ] = {}
+ _body_params: Optional[bytes] = None
+
+ # process the path parameters
+ if symphony_id is not None:
+ _path_params['symphonyId'] = symphony_id
+ if entitlement_type is not None:
+ _path_params['entitlementType'] = entitlement_type
+ # process the query parameters
+ # process the header parameters
+ # process the form parameters
+ # process the body parameter
+
+
+ # set the HTTP header `Accept`
+ if 'Accept' not in _header_params:
+ _header_params['Accept'] = self.api_client.select_header_accept(
+ [
+ 'application/json'
+ ]
+ )
+
+
+ # authentication setting
+ _auth_settings: List[str] = [
+ 'sfsAuthentication'
+ ]
+
+ return self.api_client.param_serialize(
+ method='GET',
+ resource_path='/api/v1/customer/entitlements/{symphonyId}/entitlementType/{entitlementType}',
+ path_params=_path_params,
+ query_params=_query_params,
+ header_params=_header_params,
+ body=_body_params,
+ post_params=_form_params,
+ files=_files,
+ auth_settings=_auth_settings,
+ collection_formats=_collection_formats,
+ _host=_host,
+ _request_auth=_request_auth
+ )
+
+
+
+
+ @validate_call
+ async def list_entitled_advisors(
+ self,
+ external_network: Annotated[StrictStr, Field(description="External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE")],
+ before: Annotated[Optional[StrictStr], Field(description="The before cursor for pagination")] = None,
+ after: Annotated[Optional[StrictStr], Field(description="The after cursor for pagination")] = None,
+ list_permissions: Annotated[Optional[StrictBool], Field(description="Boolean query parameter that indicates whether the search API will return the list of permissions per advisor return, or not")] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> EntitledResponse:
+ """List entitled advisors
+
+ List all entitled advisors on a given external network.
+
+ :param external_network: External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE (required)
+ :type external_network: str
+ :param before: The before cursor for pagination
+ :type before: str
+ :param after: The after cursor for pagination
+ :type after: str
+ :param list_permissions: Boolean query parameter that indicates whether the search API will return the list of permissions per advisor return, or not
+ :type list_permissions: bool
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._list_entitled_advisors_serialize(
+ external_network=external_network,
+ before=before,
+ after=after,
+ list_permissions=list_permissions,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "EntitledResponse",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ ).data
+
+
+ @validate_call
+ async def list_entitled_advisors_with_http_info(
+ self,
+ external_network: Annotated[StrictStr, Field(description="External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE")],
+ before: Annotated[Optional[StrictStr], Field(description="The before cursor for pagination")] = None,
+ after: Annotated[Optional[StrictStr], Field(description="The after cursor for pagination")] = None,
+ list_permissions: Annotated[Optional[StrictBool], Field(description="Boolean query parameter that indicates whether the search API will return the list of permissions per advisor return, or not")] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> ApiResponse[EntitledResponse]:
+ """List entitled advisors
+
+ List all entitled advisors on a given external network.
+
+ :param external_network: External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE (required)
+ :type external_network: str
+ :param before: The before cursor for pagination
+ :type before: str
+ :param after: The after cursor for pagination
+ :type after: str
+ :param list_permissions: Boolean query parameter that indicates whether the search API will return the list of permissions per advisor return, or not
+ :type list_permissions: bool
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._list_entitled_advisors_serialize(
+ external_network=external_network,
+ before=before,
+ after=after,
+ list_permissions=list_permissions,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "EntitledResponse",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ )
+
+
+ @validate_call
+ async def list_entitled_advisors_without_preload_content(
+ self,
+ external_network: Annotated[StrictStr, Field(description="External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE")],
+ before: Annotated[Optional[StrictStr], Field(description="The before cursor for pagination")] = None,
+ after: Annotated[Optional[StrictStr], Field(description="The after cursor for pagination")] = None,
+ list_permissions: Annotated[Optional[StrictBool], Field(description="Boolean query parameter that indicates whether the search API will return the list of permissions per advisor return, or not")] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RESTResponseType:
+ """List entitled advisors
+
+ List all entitled advisors on a given external network.
+
+ :param external_network: External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE (required)
+ :type external_network: str
+ :param before: The before cursor for pagination
+ :type before: str
+ :param after: The after cursor for pagination
+ :type after: str
+ :param list_permissions: Boolean query parameter that indicates whether the search API will return the list of permissions per advisor return, or not
+ :type list_permissions: bool
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._list_entitled_advisors_serialize(
+ external_network=external_network,
+ before=before,
+ after=after,
+ list_permissions=list_permissions,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "EntitledResponse",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ return response_data.response
+
+
+ def _list_entitled_advisors_serialize(
+ self,
+ external_network,
+ before,
+ after,
+ list_permissions,
+ _request_auth,
+ _content_type,
+ _headers,
+ _host_index,
+ ) -> RequestSerialized:
+
+ _host = None
+
+ _collection_formats: Dict[str, str] = {
+ }
+
+ _path_params: Dict[str, str] = {}
+ _query_params: List[Tuple[str, str]] = []
+ _header_params: Dict[str, Optional[str]] = _headers or {}
+ _form_params: List[Tuple[str, str]] = []
+ _files: Dict[
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
+ ] = {}
+ _body_params: Optional[bytes] = None
+
+ # process the path parameters
+ if external_network is not None:
+ _path_params['externalNetwork'] = external_network
+ # process the query parameters
+ if before is not None:
+
+ _query_params.append(('before', before))
+
+ if after is not None:
+
+ _query_params.append(('after', after))
+
+ if list_permissions is not None:
+
+ _query_params.append(('listPermissions', list_permissions))
+
+ # process the header parameters
+ # process the form parameters
+ # process the body parameter
+
+
+ # set the HTTP header `Accept`
+ if 'Accept' not in _header_params:
+ _header_params['Accept'] = self.api_client.select_header_accept(
+ [
+ 'application/json'
+ ]
+ )
+
+
+ # authentication setting
+ _auth_settings: List[str] = [
+ 'sfsAuthentication'
+ ]
+
+ return self.api_client.param_serialize(
+ method='GET',
+ resource_path='/api/v1/customer/entitlements/externalNetwork/{externalNetwork}/advisors',
+ path_params=_path_params,
+ query_params=_query_params,
+ header_params=_header_params,
+ body=_body_params,
+ post_params=_form_params,
+ files=_files,
+ auth_settings=_auth_settings,
+ collection_formats=_collection_formats,
+ _host=_host,
+ _request_auth=_request_auth
+ )
+
+
+
+
+ @validate_call
+ async def list_entitlements(
+ self,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> EntitlementsResponse:
+ """List entitlements (recommended)
+
+ List the available entitlements.
+
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._list_entitlements_serialize(
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "EntitlementsResponse",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ ).data
+
+
+ @validate_call
+ async def list_entitlements_with_http_info(
+ self,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> ApiResponse[EntitlementsResponse]:
+ """List entitlements (recommended)
+
+ List the available entitlements.
+
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._list_entitlements_serialize(
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "EntitlementsResponse",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ )
+
+
+ @validate_call
+ async def list_entitlements_without_preload_content(
+ self,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RESTResponseType:
+ """List entitlements (recommended)
+
+ List the available entitlements.
+
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._list_entitlements_serialize(
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "EntitlementsResponse",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ return response_data.response
+
+
+ def _list_entitlements_serialize(
+ self,
+ _request_auth,
+ _content_type,
+ _headers,
+ _host_index,
+ ) -> RequestSerialized:
+
+ _host = None
+
+ _collection_formats: Dict[str, str] = {
+ }
+
+ _path_params: Dict[str, str] = {}
+ _query_params: List[Tuple[str, str]] = []
+ _header_params: Dict[str, Optional[str]] = _headers or {}
+ _form_params: List[Tuple[str, str]] = []
+ _files: Dict[
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
+ ] = {}
+ _body_params: Optional[bytes] = None
+
+ # process the path parameters
+ # process the query parameters
+ # process the header parameters
+ # process the form parameters
+ # process the body parameter
+
+
+ # set the HTTP header `Accept`
+ if 'Accept' not in _header_params:
+ _header_params['Accept'] = self.api_client.select_header_accept(
+ [
+ 'application/json'
+ ]
+ )
+
+
+ # authentication setting
+ _auth_settings: List[str] = [
+ 'sfsAuthentication'
+ ]
+
+ return self.api_client.param_serialize(
+ method='GET',
+ resource_path='/api/v2/customer/entitlements',
+ path_params=_path_params,
+ query_params=_query_params,
+ header_params=_header_params,
+ body=_body_params,
+ post_params=_form_params,
+ files=_files,
+ auth_settings=_auth_settings,
+ collection_formats=_collection_formats,
+ _host=_host,
+ _request_auth=_request_auth
+ )
+
+
diff --git a/symphony/bdk/gen/federation_api/federation_group_new_api.py b/symphony/bdk/gen/federation_api/federation_group_new_api.py
new file mode 100644
index 00000000..70bd11e3
--- /dev/null
+++ b/symphony/bdk/gen/federation_api/federation_group_new_api.py
@@ -0,0 +1,1235 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+import warnings
+from pydantic import validate_call, Field, StrictFloat, StrictStr, StrictInt
+from typing import Any, Dict, List, Optional, Tuple, Union
+from typing_extensions import Annotated
+
+from pydantic import Field, StrictStr
+from typing import Optional
+from typing_extensions import Annotated
+from symphony.bdk.gen.federation_model.bulk_update_federation_group_request import BulkUpdateFederationGroupRequest
+from symphony.bdk.gen.federation_model.bulk_update_federation_group_response import BulkUpdateFederationGroupResponse
+from symphony.bdk.gen.federation_model.list_federation_groups_response import ListFederationGroupsResponse
+from symphony.bdk.gen.federation_model.room_set_federation_group_request import RoomSetFederationGroupRequest
+from symphony.bdk.gen.federation_model.update_federation_group_request import UpdateFederationGroupRequest
+
+from symphony.bdk.gen.api_client import ApiClient, RequestSerialized
+from symphony.bdk.gen.api_response import ApiResponse
+from symphony.bdk.gen.rest import RESTResponseType
+
+
+class FederationGroupNEWApi:
+ """NOTE: This class is auto generated by OpenAPI Generator
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+ """
+
+ def __init__(self, api_client=None) -> None:
+ if api_client is None:
+ api_client = ApiClient.get_default()
+ self.api_client = api_client
+
+
+ @validate_call
+ async def bulk_update_advisors_federation_group(
+ self,
+ bulk_update_federation_group_request: Optional[BulkUpdateFederationGroupRequest] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> BulkUpdateFederationGroupResponse:
+ """Bulk update advisor's federation group
+
+ Bulk update advisor's federation group.
+
+ :param bulk_update_federation_group_request:
+ :type bulk_update_federation_group_request: BulkUpdateFederationGroupRequest
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._bulk_update_advisors_federation_group_serialize(
+ bulk_update_federation_group_request=bulk_update_federation_group_request,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "BulkUpdateFederationGroupResponse",
+ '400': "ExternalNetworkNotFound",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ '404': "BulkUpdateAdvisorsFederationGroup404Response",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ ).data
+
+
+ @validate_call
+ async def bulk_update_advisors_federation_group_with_http_info(
+ self,
+ bulk_update_federation_group_request: Optional[BulkUpdateFederationGroupRequest] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> ApiResponse[BulkUpdateFederationGroupResponse]:
+ """Bulk update advisor's federation group
+
+ Bulk update advisor's federation group.
+
+ :param bulk_update_federation_group_request:
+ :type bulk_update_federation_group_request: BulkUpdateFederationGroupRequest
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._bulk_update_advisors_federation_group_serialize(
+ bulk_update_federation_group_request=bulk_update_federation_group_request,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "BulkUpdateFederationGroupResponse",
+ '400': "ExternalNetworkNotFound",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ '404': "BulkUpdateAdvisorsFederationGroup404Response",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ )
+
+
+ @validate_call
+ async def bulk_update_advisors_federation_group_without_preload_content(
+ self,
+ bulk_update_federation_group_request: Optional[BulkUpdateFederationGroupRequest] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RESTResponseType:
+ """Bulk update advisor's federation group
+
+ Bulk update advisor's federation group.
+
+ :param bulk_update_federation_group_request:
+ :type bulk_update_federation_group_request: BulkUpdateFederationGroupRequest
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._bulk_update_advisors_federation_group_serialize(
+ bulk_update_federation_group_request=bulk_update_federation_group_request,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "BulkUpdateFederationGroupResponse",
+ '400': "ExternalNetworkNotFound",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ '404': "BulkUpdateAdvisorsFederationGroup404Response",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ return response_data.response
+
+
+ def _bulk_update_advisors_federation_group_serialize(
+ self,
+ bulk_update_federation_group_request,
+ _request_auth,
+ _content_type,
+ _headers,
+ _host_index,
+ ) -> RequestSerialized:
+
+ _host = None
+
+ _collection_formats: Dict[str, str] = {
+ }
+
+ _path_params: Dict[str, str] = {}
+ _query_params: List[Tuple[str, str]] = []
+ _header_params: Dict[str, Optional[str]] = _headers or {}
+ _form_params: List[Tuple[str, str]] = []
+ _files: Dict[
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
+ ] = {}
+ _body_params: Optional[bytes] = None
+
+ # process the path parameters
+ # process the query parameters
+ # process the header parameters
+ # process the form parameters
+ # process the body parameter
+ if bulk_update_federation_group_request is not None:
+ _body_params = bulk_update_federation_group_request
+
+
+ # set the HTTP header `Accept`
+ if 'Accept' not in _header_params:
+ _header_params['Accept'] = self.api_client.select_header_accept(
+ [
+ 'application/json'
+ ]
+ )
+
+ # set the HTTP header `Content-Type`
+ if _content_type:
+ _header_params['Content-Type'] = _content_type
+ else:
+ _default_content_type = (
+ self.api_client.select_header_content_type(
+ [
+ 'application/json'
+ ]
+ )
+ )
+ if _default_content_type is not None:
+ _header_params['Content-Type'] = _default_content_type
+
+ # authentication setting
+ _auth_settings: List[str] = [
+ 'sfsAuthentication'
+ ]
+
+ return self.api_client.param_serialize(
+ method='POST',
+ resource_path='/api/v1/customer/advisors/federationGroup/bulk',
+ path_params=_path_params,
+ query_params=_query_params,
+ header_params=_header_params,
+ body=_body_params,
+ post_params=_form_params,
+ files=_files,
+ auth_settings=_auth_settings,
+ collection_formats=_collection_formats,
+ _host=_host,
+ _request_auth=_request_auth
+ )
+
+
+
+
+ @validate_call
+ async def list_tenant_federation_groups(
+ self,
+ before: Annotated[Optional[StrictStr], Field(description="The before cursor for pagination")] = None,
+ after: Annotated[Optional[StrictStr], Field(description="The after cursor for pagination")] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> ListFederationGroupsResponse:
+ """List all federation groups
+
+ List all federation groups
+
+ :param before: The before cursor for pagination
+ :type before: str
+ :param after: The after cursor for pagination
+ :type after: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._list_tenant_federation_groups_serialize(
+ before=before,
+ after=after,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "ListFederationGroupsResponse",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ ).data
+
+
+ @validate_call
+ async def list_tenant_federation_groups_with_http_info(
+ self,
+ before: Annotated[Optional[StrictStr], Field(description="The before cursor for pagination")] = None,
+ after: Annotated[Optional[StrictStr], Field(description="The after cursor for pagination")] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> ApiResponse[ListFederationGroupsResponse]:
+ """List all federation groups
+
+ List all federation groups
+
+ :param before: The before cursor for pagination
+ :type before: str
+ :param after: The after cursor for pagination
+ :type after: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._list_tenant_federation_groups_serialize(
+ before=before,
+ after=after,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "ListFederationGroupsResponse",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ )
+
+
+ @validate_call
+ async def list_tenant_federation_groups_without_preload_content(
+ self,
+ before: Annotated[Optional[StrictStr], Field(description="The before cursor for pagination")] = None,
+ after: Annotated[Optional[StrictStr], Field(description="The after cursor for pagination")] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RESTResponseType:
+ """List all federation groups
+
+ List all federation groups
+
+ :param before: The before cursor for pagination
+ :type before: str
+ :param after: The after cursor for pagination
+ :type after: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._list_tenant_federation_groups_serialize(
+ before=before,
+ after=after,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "ListFederationGroupsResponse",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ return response_data.response
+
+
+ def _list_tenant_federation_groups_serialize(
+ self,
+ before,
+ after,
+ _request_auth,
+ _content_type,
+ _headers,
+ _host_index,
+ ) -> RequestSerialized:
+
+ _host = None
+
+ _collection_formats: Dict[str, str] = {
+ }
+
+ _path_params: Dict[str, str] = {}
+ _query_params: List[Tuple[str, str]] = []
+ _header_params: Dict[str, Optional[str]] = _headers or {}
+ _form_params: List[Tuple[str, str]] = []
+ _files: Dict[
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
+ ] = {}
+ _body_params: Optional[bytes] = None
+
+ # process the path parameters
+ # process the query parameters
+ if before is not None:
+
+ _query_params.append(('before', before))
+
+ if after is not None:
+
+ _query_params.append(('after', after))
+
+ # process the header parameters
+ # process the form parameters
+ # process the body parameter
+
+
+ # set the HTTP header `Accept`
+ if 'Accept' not in _header_params:
+ _header_params['Accept'] = self.api_client.select_header_accept(
+ [
+ 'application/json'
+ ]
+ )
+
+
+ # authentication setting
+ _auth_settings: List[str] = [
+ 'sfsAuthentication'
+ ]
+
+ return self.api_client.param_serialize(
+ method='GET',
+ resource_path='/api/v1/customer/federationGroups',
+ path_params=_path_params,
+ query_params=_query_params,
+ header_params=_header_params,
+ body=_body_params,
+ post_params=_form_params,
+ files=_files,
+ auth_settings=_auth_settings,
+ collection_formats=_collection_formats,
+ _host=_host,
+ _request_auth=_request_auth
+ )
+
+
+
+
+ @validate_call
+ async def update_advisor_federation_group(
+ self,
+ external_network: Annotated[StrictStr, Field(description="External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE")],
+ advisor_symphony_id: Annotated[StrictStr, Field(description="Advisor's Symphony user ID")],
+ update_federation_group_request: Optional[UpdateFederationGroupRequest] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> None:
+ """Update advisor's federation group for the given external network.
+
+ Update advisor's federation group for the given external network.
+
+ :param external_network: External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE (required)
+ :type external_network: str
+ :param advisor_symphony_id: Advisor's Symphony user ID (required)
+ :type advisor_symphony_id: str
+ :param update_federation_group_request:
+ :type update_federation_group_request: UpdateFederationGroupRequest
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._update_advisor_federation_group_serialize(
+ external_network=external_network,
+ advisor_symphony_id=advisor_symphony_id,
+ update_federation_group_request=update_federation_group_request,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '204': None,
+ '400': "UpdateAdvisorFederationGroup400Response",
+ '401': "Unauthorized",
+ '403': "FederationGroupEmpForbidden",
+ '404': "UpdateAdvisorFederationGroup404Response",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ ).data
+
+
+ @validate_call
+ async def update_advisor_federation_group_with_http_info(
+ self,
+ external_network: Annotated[StrictStr, Field(description="External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE")],
+ advisor_symphony_id: Annotated[StrictStr, Field(description="Advisor's Symphony user ID")],
+ update_federation_group_request: Optional[UpdateFederationGroupRequest] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> ApiResponse[None]:
+ """Update advisor's federation group for the given external network.
+
+ Update advisor's federation group for the given external network.
+
+ :param external_network: External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE (required)
+ :type external_network: str
+ :param advisor_symphony_id: Advisor's Symphony user ID (required)
+ :type advisor_symphony_id: str
+ :param update_federation_group_request:
+ :type update_federation_group_request: UpdateFederationGroupRequest
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._update_advisor_federation_group_serialize(
+ external_network=external_network,
+ advisor_symphony_id=advisor_symphony_id,
+ update_federation_group_request=update_federation_group_request,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '204': None,
+ '400': "UpdateAdvisorFederationGroup400Response",
+ '401': "Unauthorized",
+ '403': "FederationGroupEmpForbidden",
+ '404': "UpdateAdvisorFederationGroup404Response",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ )
+
+
+ @validate_call
+ async def update_advisor_federation_group_without_preload_content(
+ self,
+ external_network: Annotated[StrictStr, Field(description="External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE")],
+ advisor_symphony_id: Annotated[StrictStr, Field(description="Advisor's Symphony user ID")],
+ update_federation_group_request: Optional[UpdateFederationGroupRequest] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RESTResponseType:
+ """Update advisor's federation group for the given external network.
+
+ Update advisor's federation group for the given external network.
+
+ :param external_network: External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE (required)
+ :type external_network: str
+ :param advisor_symphony_id: Advisor's Symphony user ID (required)
+ :type advisor_symphony_id: str
+ :param update_federation_group_request:
+ :type update_federation_group_request: UpdateFederationGroupRequest
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._update_advisor_federation_group_serialize(
+ external_network=external_network,
+ advisor_symphony_id=advisor_symphony_id,
+ update_federation_group_request=update_federation_group_request,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '204': None,
+ '400': "UpdateAdvisorFederationGroup400Response",
+ '401': "Unauthorized",
+ '403': "FederationGroupEmpForbidden",
+ '404': "UpdateAdvisorFederationGroup404Response",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ return response_data.response
+
+
+ def _update_advisor_federation_group_serialize(
+ self,
+ external_network,
+ advisor_symphony_id,
+ update_federation_group_request,
+ _request_auth,
+ _content_type,
+ _headers,
+ _host_index,
+ ) -> RequestSerialized:
+
+ _host = None
+
+ _collection_formats: Dict[str, str] = {
+ }
+
+ _path_params: Dict[str, str] = {}
+ _query_params: List[Tuple[str, str]] = []
+ _header_params: Dict[str, Optional[str]] = _headers or {}
+ _form_params: List[Tuple[str, str]] = []
+ _files: Dict[
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
+ ] = {}
+ _body_params: Optional[bytes] = None
+
+ # process the path parameters
+ if external_network is not None:
+ _path_params['externalNetwork'] = external_network
+ if advisor_symphony_id is not None:
+ _path_params['advisorSymphonyId'] = advisor_symphony_id
+ # process the query parameters
+ # process the header parameters
+ # process the form parameters
+ # process the body parameter
+ if update_federation_group_request is not None:
+ _body_params = update_federation_group_request
+
+
+ # set the HTTP header `Accept`
+ if 'Accept' not in _header_params:
+ _header_params['Accept'] = self.api_client.select_header_accept(
+ [
+ 'application/json'
+ ]
+ )
+
+ # set the HTTP header `Content-Type`
+ if _content_type:
+ _header_params['Content-Type'] = _content_type
+ else:
+ _default_content_type = (
+ self.api_client.select_header_content_type(
+ [
+ 'application/json'
+ ]
+ )
+ )
+ if _default_content_type is not None:
+ _header_params['Content-Type'] = _default_content_type
+
+ # authentication setting
+ _auth_settings: List[str] = [
+ 'sfsAuthentication'
+ ]
+
+ return self.api_client.param_serialize(
+ method='PUT',
+ resource_path='/api/v1/customer/advisors/{advisorSymphonyId}/externalNetwork/{externalNetwork}/federationGroup',
+ path_params=_path_params,
+ query_params=_query_params,
+ header_params=_header_params,
+ body=_body_params,
+ post_params=_form_params,
+ files=_files,
+ auth_settings=_auth_settings,
+ collection_formats=_collection_formats,
+ _host=_host,
+ _request_auth=_request_auth
+ )
+
+
+
+
+ @validate_call
+ async def update_room_federation_groups(
+ self,
+ stream_id: Annotated[StrictStr, Field(description="StreamId of the room to transfer")],
+ room_set_federation_group_request: Optional[RoomSetFederationGroupRequest] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> None:
+ """Set federation group of a room
+
+ Set the federation group of a room.
+
+ :param stream_id: StreamId of the room to transfer (required)
+ :type stream_id: str
+ :param room_set_federation_group_request:
+ :type room_set_federation_group_request: RoomSetFederationGroupRequest
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._update_room_federation_groups_serialize(
+ stream_id=stream_id,
+ room_set_federation_group_request=room_set_federation_group_request,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '204': None,
+ '400': "UpdateRoomFederationGroups400Response",
+ '401': "Unauthorized",
+ '403': "FederationGroupEmpForbidden",
+ '404': "UpdateRoomFederationGroups404Response",
+ '409': "RoomUpdateFederationGroupErrors",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ ).data
+
+
+ @validate_call
+ async def update_room_federation_groups_with_http_info(
+ self,
+ stream_id: Annotated[StrictStr, Field(description="StreamId of the room to transfer")],
+ room_set_federation_group_request: Optional[RoomSetFederationGroupRequest] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> ApiResponse[None]:
+ """Set federation group of a room
+
+ Set the federation group of a room.
+
+ :param stream_id: StreamId of the room to transfer (required)
+ :type stream_id: str
+ :param room_set_federation_group_request:
+ :type room_set_federation_group_request: RoomSetFederationGroupRequest
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._update_room_federation_groups_serialize(
+ stream_id=stream_id,
+ room_set_federation_group_request=room_set_federation_group_request,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '204': None,
+ '400': "UpdateRoomFederationGroups400Response",
+ '401': "Unauthorized",
+ '403': "FederationGroupEmpForbidden",
+ '404': "UpdateRoomFederationGroups404Response",
+ '409': "RoomUpdateFederationGroupErrors",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ )
+
+
+ @validate_call
+ async def update_room_federation_groups_without_preload_content(
+ self,
+ stream_id: Annotated[StrictStr, Field(description="StreamId of the room to transfer")],
+ room_set_federation_group_request: Optional[RoomSetFederationGroupRequest] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RESTResponseType:
+ """Set federation group of a room
+
+ Set the federation group of a room.
+
+ :param stream_id: StreamId of the room to transfer (required)
+ :type stream_id: str
+ :param room_set_federation_group_request:
+ :type room_set_federation_group_request: RoomSetFederationGroupRequest
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._update_room_federation_groups_serialize(
+ stream_id=stream_id,
+ room_set_federation_group_request=room_set_federation_group_request,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '204': None,
+ '400': "UpdateRoomFederationGroups400Response",
+ '401': "Unauthorized",
+ '403': "FederationGroupEmpForbidden",
+ '404': "UpdateRoomFederationGroups404Response",
+ '409': "RoomUpdateFederationGroupErrors",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ return response_data.response
+
+
+ def _update_room_federation_groups_serialize(
+ self,
+ stream_id,
+ room_set_federation_group_request,
+ _request_auth,
+ _content_type,
+ _headers,
+ _host_index,
+ ) -> RequestSerialized:
+
+ _host = None
+
+ _collection_formats: Dict[str, str] = {
+ }
+
+ _path_params: Dict[str, str] = {}
+ _query_params: List[Tuple[str, str]] = []
+ _header_params: Dict[str, Optional[str]] = _headers or {}
+ _form_params: List[Tuple[str, str]] = []
+ _files: Dict[
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
+ ] = {}
+ _body_params: Optional[bytes] = None
+
+ # process the path parameters
+ if stream_id is not None:
+ _path_params['streamId'] = stream_id
+ # process the query parameters
+ # process the header parameters
+ # process the form parameters
+ # process the body parameter
+ if room_set_federation_group_request is not None:
+ _body_params = room_set_federation_group_request
+
+
+ # set the HTTP header `Accept`
+ if 'Accept' not in _header_params:
+ _header_params['Accept'] = self.api_client.select_header_accept(
+ [
+ 'application/json'
+ ]
+ )
+
+ # set the HTTP header `Content-Type`
+ if _content_type:
+ _header_params['Content-Type'] = _content_type
+ else:
+ _default_content_type = (
+ self.api_client.select_header_content_type(
+ [
+ 'application/json'
+ ]
+ )
+ )
+ if _default_content_type is not None:
+ _header_params['Content-Type'] = _default_content_type
+
+ # authentication setting
+ _auth_settings: List[str] = [
+ 'sfsAuthentication'
+ ]
+
+ return self.api_client.param_serialize(
+ method='PUT',
+ resource_path='/api/v1/customer/rooms/{streamId}/federationGroup',
+ path_params=_path_params,
+ query_params=_query_params,
+ header_params=_header_params,
+ body=_body_params,
+ post_params=_form_params,
+ files=_files,
+ auth_settings=_auth_settings,
+ collection_formats=_collection_formats,
+ _host=_host,
+ _request_auth=_request_auth
+ )
+
+
diff --git a/symphony/bdk/gen/federation_api/permissions_api.py b/symphony/bdk/gen/federation_api/permissions_api.py
new file mode 100644
index 00000000..69ac928e
--- /dev/null
+++ b/symphony/bdk/gen/federation_api/permissions_api.py
@@ -0,0 +1,2945 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+import warnings
+from pydantic import validate_call, Field, StrictFloat, StrictStr, StrictInt
+from typing import Any, Dict, List, Optional, Tuple, Union
+from typing_extensions import Annotated
+
+from pydantic import Field, StrictStr
+from typing import Optional
+from typing_extensions import Annotated
+from symphony.bdk.gen.federation_model.advisor_permission_request import AdvisorPermissionRequest
+from symphony.bdk.gen.federation_model.advisor_permission_response import AdvisorPermissionResponse
+from symphony.bdk.gen.federation_model.advisor_permissions_response import AdvisorPermissionsResponse
+from symphony.bdk.gen.federation_model.advisors_permission_request import AdvisorsPermissionRequest
+from symphony.bdk.gen.federation_model.advisors_permission_requestv2 import AdvisorsPermissionRequestv2
+from symphony.bdk.gen.federation_model.enhanced_permissions_response import EnhancedPermissionsResponse
+from symphony.bdk.gen.federation_model.multiple_advisor_permission_response import MultipleAdvisorPermissionResponse
+from symphony.bdk.gen.federation_model.permissions_response import PermissionsResponse
+
+from symphony.bdk.gen.api_client import ApiClient, RequestSerialized
+from symphony.bdk.gen.api_response import ApiResponse
+from symphony.bdk.gen.rest import RESTResponseType
+
+
+class PermissionsApi:
+ """NOTE: This class is auto generated by OpenAPI Generator
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+ """
+
+ def __init__(self, api_client=None) -> None:
+ if api_client is None:
+ api_client = ApiClient.get_default()
+ self.api_client = api_client
+
+
+ @validate_call
+ async def add_permission_by_email(
+ self,
+ advisor_email_address: Annotated[StrictStr, Field(description="Advisor's email address")],
+ external_network: Annotated[StrictStr, Field(description="The external network")],
+ advisor_permission_request: Optional[AdvisorPermissionRequest] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> AdvisorPermissionResponse:
+ """(Deprecated) Add permission to an advisor (deprecated)
+
+ Grant permission to an advisor. \\ Refer to the Permissions table on the Authentication page for the default permissions. \\ For multi-company contacts, the contacts must be from the same network, e.g. all from WeChat or all from WhatsApp. Cross-network rooms are not authorized.
+
+ :param advisor_email_address: Advisor's email address (required)
+ :type advisor_email_address: str
+ :param external_network: The external network (required)
+ :type external_network: str
+ :param advisor_permission_request:
+ :type advisor_permission_request: AdvisorPermissionRequest
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+ warnings.warn("POST /api/v1/customer/advisors/advisorEmailAddress/{advisorEmailAddress}/externalNetwork/{externalNetwork}/permissions is deprecated.", DeprecationWarning)
+
+ _param = self._add_permission_by_email_serialize(
+ advisor_email_address=advisor_email_address,
+ external_network=external_network,
+ advisor_permission_request=advisor_permission_request,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "AdvisorPermissionResponse",
+ '404': "InlineResponse4042",
+ '409': "PermissionAlreadyAssigned",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ ).data
+
+
+ @validate_call
+ async def add_permission_by_email_with_http_info(
+ self,
+ advisor_email_address: Annotated[StrictStr, Field(description="Advisor's email address")],
+ external_network: Annotated[StrictStr, Field(description="The external network")],
+ advisor_permission_request: Optional[AdvisorPermissionRequest] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> ApiResponse[AdvisorPermissionResponse]:
+ """(Deprecated) Add permission to an advisor (deprecated)
+
+ Grant permission to an advisor. \\ Refer to the Permissions table on the Authentication page for the default permissions. \\ For multi-company contacts, the contacts must be from the same network, e.g. all from WeChat or all from WhatsApp. Cross-network rooms are not authorized.
+
+ :param advisor_email_address: Advisor's email address (required)
+ :type advisor_email_address: str
+ :param external_network: The external network (required)
+ :type external_network: str
+ :param advisor_permission_request:
+ :type advisor_permission_request: AdvisorPermissionRequest
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+ warnings.warn("POST /api/v1/customer/advisors/advisorEmailAddress/{advisorEmailAddress}/externalNetwork/{externalNetwork}/permissions is deprecated.", DeprecationWarning)
+
+ _param = self._add_permission_by_email_serialize(
+ advisor_email_address=advisor_email_address,
+ external_network=external_network,
+ advisor_permission_request=advisor_permission_request,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "AdvisorPermissionResponse",
+ '404': "InlineResponse4042",
+ '409': "PermissionAlreadyAssigned",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ )
+
+
+ @validate_call
+ async def add_permission_by_email_without_preload_content(
+ self,
+ advisor_email_address: Annotated[StrictStr, Field(description="Advisor's email address")],
+ external_network: Annotated[StrictStr, Field(description="The external network")],
+ advisor_permission_request: Optional[AdvisorPermissionRequest] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RESTResponseType:
+ """(Deprecated) Add permission to an advisor (deprecated)
+
+ Grant permission to an advisor. \\ Refer to the Permissions table on the Authentication page for the default permissions. \\ For multi-company contacts, the contacts must be from the same network, e.g. all from WeChat or all from WhatsApp. Cross-network rooms are not authorized.
+
+ :param advisor_email_address: Advisor's email address (required)
+ :type advisor_email_address: str
+ :param external_network: The external network (required)
+ :type external_network: str
+ :param advisor_permission_request:
+ :type advisor_permission_request: AdvisorPermissionRequest
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+ warnings.warn("POST /api/v1/customer/advisors/advisorEmailAddress/{advisorEmailAddress}/externalNetwork/{externalNetwork}/permissions is deprecated.", DeprecationWarning)
+
+ _param = self._add_permission_by_email_serialize(
+ advisor_email_address=advisor_email_address,
+ external_network=external_network,
+ advisor_permission_request=advisor_permission_request,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "AdvisorPermissionResponse",
+ '404': "InlineResponse4042",
+ '409': "PermissionAlreadyAssigned",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ return response_data.response
+
+
+ def _add_permission_by_email_serialize(
+ self,
+ advisor_email_address,
+ external_network,
+ advisor_permission_request,
+ _request_auth,
+ _content_type,
+ _headers,
+ _host_index,
+ ) -> RequestSerialized:
+
+ _host = None
+
+ _collection_formats: Dict[str, str] = {
+ }
+
+ _path_params: Dict[str, str] = {}
+ _query_params: List[Tuple[str, str]] = []
+ _header_params: Dict[str, Optional[str]] = _headers or {}
+ _form_params: List[Tuple[str, str]] = []
+ _files: Dict[
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
+ ] = {}
+ _body_params: Optional[bytes] = None
+
+ # process the path parameters
+ if advisor_email_address is not None:
+ _path_params['advisorEmailAddress'] = advisor_email_address
+ if external_network is not None:
+ _path_params['externalNetwork'] = external_network
+ # process the query parameters
+ # process the header parameters
+ # process the form parameters
+ # process the body parameter
+ if advisor_permission_request is not None:
+ _body_params = advisor_permission_request
+
+
+ # set the HTTP header `Accept`
+ if 'Accept' not in _header_params:
+ _header_params['Accept'] = self.api_client.select_header_accept(
+ [
+ 'application/json'
+ ]
+ )
+
+ # set the HTTP header `Content-Type`
+ if _content_type:
+ _header_params['Content-Type'] = _content_type
+ else:
+ _default_content_type = (
+ self.api_client.select_header_content_type(
+ [
+ 'application/json'
+ ]
+ )
+ )
+ if _default_content_type is not None:
+ _header_params['Content-Type'] = _default_content_type
+
+ # authentication setting
+ _auth_settings: List[str] = [
+ 'sfsAuthentication'
+ ]
+
+ return self.api_client.param_serialize(
+ method='POST',
+ resource_path='/api/v1/customer/advisors/advisorEmailAddress/{advisorEmailAddress}/externalNetwork/{externalNetwork}/permissions',
+ path_params=_path_params,
+ query_params=_query_params,
+ header_params=_header_params,
+ body=_body_params,
+ post_params=_form_params,
+ files=_files,
+ auth_settings=_auth_settings,
+ collection_formats=_collection_formats,
+ _host=_host,
+ _request_auth=_request_auth
+ )
+
+
+
+
+ @validate_call
+ async def add_permission_by_symphony_id(
+ self,
+ advisor_symphony_id: Annotated[StrictStr, Field(description="Advisor's Symphony user ID")],
+ external_network: Annotated[StrictStr, Field(description="The external network")],
+ advisor_permission_request: Optional[AdvisorPermissionRequest] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> AdvisorPermissionResponse:
+ """Add permission to an advisor (recommended)
+
+ Grant permission to an advisor. \\ Refer to the Permissions table on the Authentication page for the default permissions. \\ For multi-company contacts, the contacts must be from the same network, e.g. all from WeChat or all from WhatsApp. Cross-network rooms are not authorized.
+
+ :param advisor_symphony_id: Advisor's Symphony user ID (required)
+ :type advisor_symphony_id: str
+ :param external_network: The external network (required)
+ :type external_network: str
+ :param advisor_permission_request:
+ :type advisor_permission_request: AdvisorPermissionRequest
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._add_permission_by_symphony_id_serialize(
+ advisor_symphony_id=advisor_symphony_id,
+ external_network=external_network,
+ advisor_permission_request=advisor_permission_request,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "AdvisorPermissionResponse",
+ '404': "InlineResponse4042",
+ '409': "PermissionAlreadyAssigned",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ ).data
+
+
+ @validate_call
+ async def add_permission_by_symphony_id_with_http_info(
+ self,
+ advisor_symphony_id: Annotated[StrictStr, Field(description="Advisor's Symphony user ID")],
+ external_network: Annotated[StrictStr, Field(description="The external network")],
+ advisor_permission_request: Optional[AdvisorPermissionRequest] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> ApiResponse[AdvisorPermissionResponse]:
+ """Add permission to an advisor (recommended)
+
+ Grant permission to an advisor. \\ Refer to the Permissions table on the Authentication page for the default permissions. \\ For multi-company contacts, the contacts must be from the same network, e.g. all from WeChat or all from WhatsApp. Cross-network rooms are not authorized.
+
+ :param advisor_symphony_id: Advisor's Symphony user ID (required)
+ :type advisor_symphony_id: str
+ :param external_network: The external network (required)
+ :type external_network: str
+ :param advisor_permission_request:
+ :type advisor_permission_request: AdvisorPermissionRequest
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._add_permission_by_symphony_id_serialize(
+ advisor_symphony_id=advisor_symphony_id,
+ external_network=external_network,
+ advisor_permission_request=advisor_permission_request,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "AdvisorPermissionResponse",
+ '404': "InlineResponse4042",
+ '409': "PermissionAlreadyAssigned",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ )
+
+
+ @validate_call
+ async def add_permission_by_symphony_id_without_preload_content(
+ self,
+ advisor_symphony_id: Annotated[StrictStr, Field(description="Advisor's Symphony user ID")],
+ external_network: Annotated[StrictStr, Field(description="The external network")],
+ advisor_permission_request: Optional[AdvisorPermissionRequest] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RESTResponseType:
+ """Add permission to an advisor (recommended)
+
+ Grant permission to an advisor. \\ Refer to the Permissions table on the Authentication page for the default permissions. \\ For multi-company contacts, the contacts must be from the same network, e.g. all from WeChat or all from WhatsApp. Cross-network rooms are not authorized.
+
+ :param advisor_symphony_id: Advisor's Symphony user ID (required)
+ :type advisor_symphony_id: str
+ :param external_network: The external network (required)
+ :type external_network: str
+ :param advisor_permission_request:
+ :type advisor_permission_request: AdvisorPermissionRequest
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._add_permission_by_symphony_id_serialize(
+ advisor_symphony_id=advisor_symphony_id,
+ external_network=external_network,
+ advisor_permission_request=advisor_permission_request,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "AdvisorPermissionResponse",
+ '404': "InlineResponse4042",
+ '409': "PermissionAlreadyAssigned",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ return response_data.response
+
+
+ def _add_permission_by_symphony_id_serialize(
+ self,
+ advisor_symphony_id,
+ external_network,
+ advisor_permission_request,
+ _request_auth,
+ _content_type,
+ _headers,
+ _host_index,
+ ) -> RequestSerialized:
+
+ _host = None
+
+ _collection_formats: Dict[str, str] = {
+ }
+
+ _path_params: Dict[str, str] = {}
+ _query_params: List[Tuple[str, str]] = []
+ _header_params: Dict[str, Optional[str]] = _headers or {}
+ _form_params: List[Tuple[str, str]] = []
+ _files: Dict[
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
+ ] = {}
+ _body_params: Optional[bytes] = None
+
+ # process the path parameters
+ if advisor_symphony_id is not None:
+ _path_params['advisorSymphonyId'] = advisor_symphony_id
+ if external_network is not None:
+ _path_params['externalNetwork'] = external_network
+ # process the query parameters
+ # process the header parameters
+ # process the form parameters
+ # process the body parameter
+ if advisor_permission_request is not None:
+ _body_params = advisor_permission_request
+
+
+ # set the HTTP header `Accept`
+ if 'Accept' not in _header_params:
+ _header_params['Accept'] = self.api_client.select_header_accept(
+ [
+ 'application/json'
+ ]
+ )
+
+ # set the HTTP header `Content-Type`
+ if _content_type:
+ _header_params['Content-Type'] = _content_type
+ else:
+ _default_content_type = (
+ self.api_client.select_header_content_type(
+ [
+ 'application/json'
+ ]
+ )
+ )
+ if _default_content_type is not None:
+ _header_params['Content-Type'] = _default_content_type
+
+ # authentication setting
+ _auth_settings: List[str] = [
+ 'sfsAuthentication'
+ ]
+
+ return self.api_client.param_serialize(
+ method='POST',
+ resource_path='/api/v2/customer/advisors/{advisorSymphonyId}/externalNetwork/{externalNetwork}/permissions',
+ path_params=_path_params,
+ query_params=_query_params,
+ header_params=_header_params,
+ body=_body_params,
+ post_params=_form_params,
+ files=_files,
+ auth_settings=_auth_settings,
+ collection_formats=_collection_formats,
+ _host=_host,
+ _request_auth=_request_auth
+ )
+
+
+
+
+ @validate_call
+ async def add_permission_to_multiple_advisor(
+ self,
+ advisors_permission_requestv2: Optional[AdvisorsPermissionRequestv2] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> MultipleAdvisorPermissionResponse:
+ """Add a permission to multiple advisors (recommended)
+
+ Grant permission to multiple advisors.
+
+ :param advisors_permission_requestv2:
+ :type advisors_permission_requestv2: AdvisorsPermissionRequestv2
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._add_permission_to_multiple_advisor_serialize(
+ advisors_permission_requestv2=advisors_permission_requestv2,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "MultipleAdvisorPermissionResponse",
+ '404': "InlineResponse4042",
+ '409': "PermissionAlreadyAssigned",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ ).data
+
+
+ @validate_call
+ async def add_permission_to_multiple_advisor_with_http_info(
+ self,
+ advisors_permission_requestv2: Optional[AdvisorsPermissionRequestv2] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> ApiResponse[MultipleAdvisorPermissionResponse]:
+ """Add a permission to multiple advisors (recommended)
+
+ Grant permission to multiple advisors.
+
+ :param advisors_permission_requestv2:
+ :type advisors_permission_requestv2: AdvisorsPermissionRequestv2
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._add_permission_to_multiple_advisor_serialize(
+ advisors_permission_requestv2=advisors_permission_requestv2,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "MultipleAdvisorPermissionResponse",
+ '404': "InlineResponse4042",
+ '409': "PermissionAlreadyAssigned",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ )
+
+
+ @validate_call
+ async def add_permission_to_multiple_advisor_without_preload_content(
+ self,
+ advisors_permission_requestv2: Optional[AdvisorsPermissionRequestv2] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RESTResponseType:
+ """Add a permission to multiple advisors (recommended)
+
+ Grant permission to multiple advisors.
+
+ :param advisors_permission_requestv2:
+ :type advisors_permission_requestv2: AdvisorsPermissionRequestv2
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._add_permission_to_multiple_advisor_serialize(
+ advisors_permission_requestv2=advisors_permission_requestv2,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "MultipleAdvisorPermissionResponse",
+ '404': "InlineResponse4042",
+ '409': "PermissionAlreadyAssigned",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ return response_data.response
+
+
+ def _add_permission_to_multiple_advisor_serialize(
+ self,
+ advisors_permission_requestv2,
+ _request_auth,
+ _content_type,
+ _headers,
+ _host_index,
+ ) -> RequestSerialized:
+
+ _host = None
+
+ _collection_formats: Dict[str, str] = {
+ }
+
+ _path_params: Dict[str, str] = {}
+ _query_params: List[Tuple[str, str]] = []
+ _header_params: Dict[str, Optional[str]] = _headers or {}
+ _form_params: List[Tuple[str, str]] = []
+ _files: Dict[
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
+ ] = {}
+ _body_params: Optional[bytes] = None
+
+ # process the path parameters
+ # process the query parameters
+ # process the header parameters
+ # process the form parameters
+ # process the body parameter
+ if advisors_permission_requestv2 is not None:
+ _body_params = advisors_permission_requestv2
+
+
+ # set the HTTP header `Accept`
+ if 'Accept' not in _header_params:
+ _header_params['Accept'] = self.api_client.select_header_accept(
+ [
+ 'application/json'
+ ]
+ )
+
+ # set the HTTP header `Content-Type`
+ if _content_type:
+ _header_params['Content-Type'] = _content_type
+ else:
+ _default_content_type = (
+ self.api_client.select_header_content_type(
+ [
+ 'application/json'
+ ]
+ )
+ )
+ if _default_content_type is not None:
+ _header_params['Content-Type'] = _default_content_type
+
+ # authentication setting
+ _auth_settings: List[str] = [
+ 'sfsAuthentication'
+ ]
+
+ return self.api_client.param_serialize(
+ method='POST',
+ resource_path='/api/v2/customer/advisors/permissions',
+ path_params=_path_params,
+ query_params=_query_params,
+ header_params=_header_params,
+ body=_body_params,
+ post_params=_form_params,
+ files=_files,
+ auth_settings=_auth_settings,
+ collection_formats=_collection_formats,
+ _host=_host,
+ _request_auth=_request_auth
+ )
+
+
+
+
+ @validate_call
+ async def add_permission_to_multiple_advisor_by_email(
+ self,
+ advisors_permission_request: Optional[AdvisorsPermissionRequest] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> MultipleAdvisorPermissionResponse:
+ """(Deprecated) Add permission to multiple advisors (deprecated)
+
+ Add a permission to multiple advisors.
+
+ :param advisors_permission_request:
+ :type advisors_permission_request: AdvisorsPermissionRequest
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+ warnings.warn("POST /api/v1/customer/advisors/permissions is deprecated.", DeprecationWarning)
+
+ _param = self._add_permission_to_multiple_advisor_by_email_serialize(
+ advisors_permission_request=advisors_permission_request,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "MultipleAdvisorPermissionResponse",
+ '404': "InlineResponse4042",
+ '409': "PermissionAlreadyAssigned",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ ).data
+
+
+ @validate_call
+ async def add_permission_to_multiple_advisor_by_email_with_http_info(
+ self,
+ advisors_permission_request: Optional[AdvisorsPermissionRequest] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> ApiResponse[MultipleAdvisorPermissionResponse]:
+ """(Deprecated) Add permission to multiple advisors (deprecated)
+
+ Add a permission to multiple advisors.
+
+ :param advisors_permission_request:
+ :type advisors_permission_request: AdvisorsPermissionRequest
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+ warnings.warn("POST /api/v1/customer/advisors/permissions is deprecated.", DeprecationWarning)
+
+ _param = self._add_permission_to_multiple_advisor_by_email_serialize(
+ advisors_permission_request=advisors_permission_request,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "MultipleAdvisorPermissionResponse",
+ '404': "InlineResponse4042",
+ '409': "PermissionAlreadyAssigned",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ )
+
+
+ @validate_call
+ async def add_permission_to_multiple_advisor_by_email_without_preload_content(
+ self,
+ advisors_permission_request: Optional[AdvisorsPermissionRequest] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RESTResponseType:
+ """(Deprecated) Add permission to multiple advisors (deprecated)
+
+ Add a permission to multiple advisors.
+
+ :param advisors_permission_request:
+ :type advisors_permission_request: AdvisorsPermissionRequest
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+ warnings.warn("POST /api/v1/customer/advisors/permissions is deprecated.", DeprecationWarning)
+
+ _param = self._add_permission_to_multiple_advisor_by_email_serialize(
+ advisors_permission_request=advisors_permission_request,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "MultipleAdvisorPermissionResponse",
+ '404': "InlineResponse4042",
+ '409': "PermissionAlreadyAssigned",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ return response_data.response
+
+
+ def _add_permission_to_multiple_advisor_by_email_serialize(
+ self,
+ advisors_permission_request,
+ _request_auth,
+ _content_type,
+ _headers,
+ _host_index,
+ ) -> RequestSerialized:
+
+ _host = None
+
+ _collection_formats: Dict[str, str] = {
+ }
+
+ _path_params: Dict[str, str] = {}
+ _query_params: List[Tuple[str, str]] = []
+ _header_params: Dict[str, Optional[str]] = _headers or {}
+ _form_params: List[Tuple[str, str]] = []
+ _files: Dict[
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
+ ] = {}
+ _body_params: Optional[bytes] = None
+
+ # process the path parameters
+ # process the query parameters
+ # process the header parameters
+ # process the form parameters
+ # process the body parameter
+ if advisors_permission_request is not None:
+ _body_params = advisors_permission_request
+
+
+ # set the HTTP header `Accept`
+ if 'Accept' not in _header_params:
+ _header_params['Accept'] = self.api_client.select_header_accept(
+ [
+ 'application/json'
+ ]
+ )
+
+ # set the HTTP header `Content-Type`
+ if _content_type:
+ _header_params['Content-Type'] = _content_type
+ else:
+ _default_content_type = (
+ self.api_client.select_header_content_type(
+ [
+ 'application/json'
+ ]
+ )
+ )
+ if _default_content_type is not None:
+ _header_params['Content-Type'] = _default_content_type
+
+ # authentication setting
+ _auth_settings: List[str] = [
+ 'sfsAuthentication'
+ ]
+
+ return self.api_client.param_serialize(
+ method='POST',
+ resource_path='/api/v1/customer/advisors/permissions',
+ path_params=_path_params,
+ query_params=_query_params,
+ header_params=_header_params,
+ body=_body_params,
+ post_params=_form_params,
+ files=_files,
+ auth_settings=_auth_settings,
+ collection_formats=_collection_formats,
+ _host=_host,
+ _request_auth=_request_auth
+ )
+
+
+
+
+ @validate_call
+ async def list_advisor_permissions_by_email(
+ self,
+ advisor_email_address: Annotated[StrictStr, Field(description="Advisor's email address")],
+ external_network: Annotated[StrictStr, Field(description="The external network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> AdvisorPermissionsResponse:
+ """(Deprecated) List advisor's permissions (deprecated)
+
+ List an advisor's permissions.
+
+ :param advisor_email_address: Advisor's email address (required)
+ :type advisor_email_address: str
+ :param external_network: The external network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE (required)
+ :type external_network: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+ warnings.warn("GET /api/v1/customer/advisors/advisorEmailAddress/{advisorEmailAddress}/externalNetwork/{externalNetwork}/permissions is deprecated.", DeprecationWarning)
+
+ _param = self._list_advisor_permissions_by_email_serialize(
+ advisor_email_address=advisor_email_address,
+ external_network=external_network,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "AdvisorPermissionsResponse",
+ '404': "AdvisorNotFound",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ ).data
+
+
+ @validate_call
+ async def list_advisor_permissions_by_email_with_http_info(
+ self,
+ advisor_email_address: Annotated[StrictStr, Field(description="Advisor's email address")],
+ external_network: Annotated[StrictStr, Field(description="The external network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> ApiResponse[AdvisorPermissionsResponse]:
+ """(Deprecated) List advisor's permissions (deprecated)
+
+ List an advisor's permissions.
+
+ :param advisor_email_address: Advisor's email address (required)
+ :type advisor_email_address: str
+ :param external_network: The external network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE (required)
+ :type external_network: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+ warnings.warn("GET /api/v1/customer/advisors/advisorEmailAddress/{advisorEmailAddress}/externalNetwork/{externalNetwork}/permissions is deprecated.", DeprecationWarning)
+
+ _param = self._list_advisor_permissions_by_email_serialize(
+ advisor_email_address=advisor_email_address,
+ external_network=external_network,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "AdvisorPermissionsResponse",
+ '404': "AdvisorNotFound",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ )
+
+
+ @validate_call
+ async def list_advisor_permissions_by_email_without_preload_content(
+ self,
+ advisor_email_address: Annotated[StrictStr, Field(description="Advisor's email address")],
+ external_network: Annotated[StrictStr, Field(description="The external network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RESTResponseType:
+ """(Deprecated) List advisor's permissions (deprecated)
+
+ List an advisor's permissions.
+
+ :param advisor_email_address: Advisor's email address (required)
+ :type advisor_email_address: str
+ :param external_network: The external network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE (required)
+ :type external_network: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+ warnings.warn("GET /api/v1/customer/advisors/advisorEmailAddress/{advisorEmailAddress}/externalNetwork/{externalNetwork}/permissions is deprecated.", DeprecationWarning)
+
+ _param = self._list_advisor_permissions_by_email_serialize(
+ advisor_email_address=advisor_email_address,
+ external_network=external_network,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "AdvisorPermissionsResponse",
+ '404': "AdvisorNotFound",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ return response_data.response
+
+
+ def _list_advisor_permissions_by_email_serialize(
+ self,
+ advisor_email_address,
+ external_network,
+ _request_auth,
+ _content_type,
+ _headers,
+ _host_index,
+ ) -> RequestSerialized:
+
+ _host = None
+
+ _collection_formats: Dict[str, str] = {
+ }
+
+ _path_params: Dict[str, str] = {}
+ _query_params: List[Tuple[str, str]] = []
+ _header_params: Dict[str, Optional[str]] = _headers or {}
+ _form_params: List[Tuple[str, str]] = []
+ _files: Dict[
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
+ ] = {}
+ _body_params: Optional[bytes] = None
+
+ # process the path parameters
+ if advisor_email_address is not None:
+ _path_params['advisorEmailAddress'] = advisor_email_address
+ if external_network is not None:
+ _path_params['externalNetwork'] = external_network
+ # process the query parameters
+ # process the header parameters
+ # process the form parameters
+ # process the body parameter
+
+
+ # set the HTTP header `Accept`
+ if 'Accept' not in _header_params:
+ _header_params['Accept'] = self.api_client.select_header_accept(
+ [
+ 'application/json'
+ ]
+ )
+
+
+ # authentication setting
+ _auth_settings: List[str] = [
+ 'sfsAuthentication'
+ ]
+
+ return self.api_client.param_serialize(
+ method='GET',
+ resource_path='/api/v1/customer/advisors/advisorEmailAddress/{advisorEmailAddress}/externalNetwork/{externalNetwork}/permissions',
+ path_params=_path_params,
+ query_params=_query_params,
+ header_params=_header_params,
+ body=_body_params,
+ post_params=_form_params,
+ files=_files,
+ auth_settings=_auth_settings,
+ collection_formats=_collection_formats,
+ _host=_host,
+ _request_auth=_request_auth
+ )
+
+
+
+
+ @validate_call
+ async def list_advisor_permissions_by_symphony_id(
+ self,
+ advisor_symphony_id: Annotated[StrictStr, Field(description="Advisor's Symphony user ID")],
+ external_network: Annotated[StrictStr, Field(description="The external network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> AdvisorPermissionsResponse:
+ """List advisor's permissions (recommended)
+
+ List the permissions granted to an advisor on an external network.
+
+ :param advisor_symphony_id: Advisor's Symphony user ID (required)
+ :type advisor_symphony_id: str
+ :param external_network: The external network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE (required)
+ :type external_network: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._list_advisor_permissions_by_symphony_id_serialize(
+ advisor_symphony_id=advisor_symphony_id,
+ external_network=external_network,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "AdvisorPermissionsResponse",
+ '404': "AdvisorNotFound",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ ).data
+
+
+ @validate_call
+ async def list_advisor_permissions_by_symphony_id_with_http_info(
+ self,
+ advisor_symphony_id: Annotated[StrictStr, Field(description="Advisor's Symphony user ID")],
+ external_network: Annotated[StrictStr, Field(description="The external network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> ApiResponse[AdvisorPermissionsResponse]:
+ """List advisor's permissions (recommended)
+
+ List the permissions granted to an advisor on an external network.
+
+ :param advisor_symphony_id: Advisor's Symphony user ID (required)
+ :type advisor_symphony_id: str
+ :param external_network: The external network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE (required)
+ :type external_network: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._list_advisor_permissions_by_symphony_id_serialize(
+ advisor_symphony_id=advisor_symphony_id,
+ external_network=external_network,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "AdvisorPermissionsResponse",
+ '404': "AdvisorNotFound",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ )
+
+
+ @validate_call
+ async def list_advisor_permissions_by_symphony_id_without_preload_content(
+ self,
+ advisor_symphony_id: Annotated[StrictStr, Field(description="Advisor's Symphony user ID")],
+ external_network: Annotated[StrictStr, Field(description="The external network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RESTResponseType:
+ """List advisor's permissions (recommended)
+
+ List the permissions granted to an advisor on an external network.
+
+ :param advisor_symphony_id: Advisor's Symphony user ID (required)
+ :type advisor_symphony_id: str
+ :param external_network: The external network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE (required)
+ :type external_network: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._list_advisor_permissions_by_symphony_id_serialize(
+ advisor_symphony_id=advisor_symphony_id,
+ external_network=external_network,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "AdvisorPermissionsResponse",
+ '404': "AdvisorNotFound",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ return response_data.response
+
+
+ def _list_advisor_permissions_by_symphony_id_serialize(
+ self,
+ advisor_symphony_id,
+ external_network,
+ _request_auth,
+ _content_type,
+ _headers,
+ _host_index,
+ ) -> RequestSerialized:
+
+ _host = None
+
+ _collection_formats: Dict[str, str] = {
+ }
+
+ _path_params: Dict[str, str] = {}
+ _query_params: List[Tuple[str, str]] = []
+ _header_params: Dict[str, Optional[str]] = _headers or {}
+ _form_params: List[Tuple[str, str]] = []
+ _files: Dict[
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
+ ] = {}
+ _body_params: Optional[bytes] = None
+
+ # process the path parameters
+ if advisor_symphony_id is not None:
+ _path_params['advisorSymphonyId'] = advisor_symphony_id
+ if external_network is not None:
+ _path_params['externalNetwork'] = external_network
+ # process the query parameters
+ # process the header parameters
+ # process the form parameters
+ # process the body parameter
+
+
+ # set the HTTP header `Accept`
+ if 'Accept' not in _header_params:
+ _header_params['Accept'] = self.api_client.select_header_accept(
+ [
+ 'application/json'
+ ]
+ )
+
+
+ # authentication setting
+ _auth_settings: List[str] = [
+ 'sfsAuthentication'
+ ]
+
+ return self.api_client.param_serialize(
+ method='GET',
+ resource_path='/api/v2/customer/advisors/{advisorSymphonyId}/externalNetwork/{externalNetwork}/permissions',
+ path_params=_path_params,
+ query_params=_query_params,
+ header_params=_header_params,
+ body=_body_params,
+ post_params=_form_params,
+ files=_files,
+ auth_settings=_auth_settings,
+ collection_formats=_collection_formats,
+ _host=_host,
+ _request_auth=_request_auth
+ )
+
+
+
+
+ @validate_call
+ async def list_emp_permissions(
+ self,
+ external_network: Annotated[StrictStr, Field(description="The external network.")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> EnhancedPermissionsResponse:
+ """List EMP Permissions
+
+ List all permissions available for the external network at \"CONNECT-DOMAIN\"
For each permission, returns id, name and whether they are set by default or not
+
+ :param external_network: The external network. (required)
+ :type external_network: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._list_emp_permissions_serialize(
+ external_network=external_network,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "EnhancedPermissionsResponse",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ ).data
+
+
+ @validate_call
+ async def list_emp_permissions_with_http_info(
+ self,
+ external_network: Annotated[StrictStr, Field(description="The external network.")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> ApiResponse[EnhancedPermissionsResponse]:
+ """List EMP Permissions
+
+ List all permissions available for the external network at \"CONNECT-DOMAIN\"
For each permission, returns id, name and whether they are set by default or not
+
+ :param external_network: The external network. (required)
+ :type external_network: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._list_emp_permissions_serialize(
+ external_network=external_network,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "EnhancedPermissionsResponse",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ )
+
+
+ @validate_call
+ async def list_emp_permissions_without_preload_content(
+ self,
+ external_network: Annotated[StrictStr, Field(description="The external network.")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RESTResponseType:
+ """List EMP Permissions
+
+ List all permissions available for the external network at \"CONNECT-DOMAIN\"
For each permission, returns id, name and whether they are set by default or not
+
+ :param external_network: The external network. (required)
+ :type external_network: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._list_emp_permissions_serialize(
+ external_network=external_network,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "EnhancedPermissionsResponse",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ return response_data.response
+
+
+ def _list_emp_permissions_serialize(
+ self,
+ external_network,
+ _request_auth,
+ _content_type,
+ _headers,
+ _host_index,
+ ) -> RequestSerialized:
+
+ _host = None
+
+ _collection_formats: Dict[str, str] = {
+ }
+
+ _path_params: Dict[str, str] = {}
+ _query_params: List[Tuple[str, str]] = []
+ _header_params: Dict[str, Optional[str]] = _headers or {}
+ _form_params: List[Tuple[str, str]] = []
+ _files: Dict[
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
+ ] = {}
+ _body_params: Optional[bytes] = None
+
+ # process the path parameters
+ if external_network is not None:
+ _path_params['externalNetwork'] = external_network
+ # process the query parameters
+ # process the header parameters
+ # process the form parameters
+ # process the body parameter
+
+
+ # set the HTTP header `Accept`
+ if 'Accept' not in _header_params:
+ _header_params['Accept'] = self.api_client.select_header_accept(
+ [
+ 'application/json'
+ ]
+ )
+
+
+ # authentication setting
+ _auth_settings: List[str] = [
+ 'sfsAuthentication'
+ ]
+
+ return self.api_client.param_serialize(
+ method='GET',
+ resource_path='/api/v1/customer/externalNetwork/{externalNetwork}/permissions',
+ path_params=_path_params,
+ query_params=_query_params,
+ header_params=_header_params,
+ body=_body_params,
+ post_params=_form_params,
+ files=_files,
+ auth_settings=_auth_settings,
+ collection_formats=_collection_formats,
+ _host=_host,
+ _request_auth=_request_auth
+ )
+
+
+
+
+ @validate_call
+ async def list_permissions(
+ self,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> PermissionsResponse:
+ """List permissions
+
+ List of available permissions for the external network at \"CONNECT-DOMAIN\"
+
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._list_permissions_serialize(
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "PermissionsResponse",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ ).data
+
+
+ @validate_call
+ async def list_permissions_with_http_info(
+ self,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> ApiResponse[PermissionsResponse]:
+ """List permissions
+
+ List of available permissions for the external network at \"CONNECT-DOMAIN\"
+
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._list_permissions_serialize(
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "PermissionsResponse",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ )
+
+
+ @validate_call
+ async def list_permissions_without_preload_content(
+ self,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RESTResponseType:
+ """List permissions
+
+ List of available permissions for the external network at \"CONNECT-DOMAIN\"
+
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._list_permissions_serialize(
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "PermissionsResponse",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ return response_data.response
+
+
+ def _list_permissions_serialize(
+ self,
+ _request_auth,
+ _content_type,
+ _headers,
+ _host_index,
+ ) -> RequestSerialized:
+
+ _host = None
+
+ _collection_formats: Dict[str, str] = {
+ }
+
+ _path_params: Dict[str, str] = {}
+ _query_params: List[Tuple[str, str]] = []
+ _header_params: Dict[str, Optional[str]] = _headers or {}
+ _form_params: List[Tuple[str, str]] = []
+ _files: Dict[
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
+ ] = {}
+ _body_params: Optional[bytes] = None
+
+ # process the path parameters
+ # process the query parameters
+ # process the header parameters
+ # process the form parameters
+ # process the body parameter
+
+
+ # set the HTTP header `Accept`
+ if 'Accept' not in _header_params:
+ _header_params['Accept'] = self.api_client.select_header_accept(
+ [
+ 'application/json'
+ ]
+ )
+
+
+ # authentication setting
+ _auth_settings: List[str] = [
+ 'sfsAuthentication'
+ ]
+
+ return self.api_client.param_serialize(
+ method='GET',
+ resource_path='/api/v1/customer/permissions',
+ path_params=_path_params,
+ query_params=_query_params,
+ header_params=_header_params,
+ body=_body_params,
+ post_params=_form_params,
+ files=_files,
+ auth_settings=_auth_settings,
+ collection_formats=_collection_formats,
+ _host=_host,
+ _request_auth=_request_auth
+ )
+
+
+
+
+ @validate_call
+ async def remove_permission_by_email(
+ self,
+ advisor_email_address: Annotated[StrictStr, Field(description="Advisor's email address")],
+ external_network: Annotated[StrictStr, Field(description="The external network")],
+ permission_name: Annotated[StrictStr, Field(description="permissionName to remove")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> None:
+ """(Deprecated) Remove permission from an advisor (deprecated)
+
+ Remove a permission from an advisor.
+
+ :param advisor_email_address: Advisor's email address (required)
+ :type advisor_email_address: str
+ :param external_network: The external network (required)
+ :type external_network: str
+ :param permission_name: permissionName to remove (required)
+ :type permission_name: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+ warnings.warn("DELETE /api/v1/customer/advisors/advisorEmailAddress/{advisorEmailAddress}/externalNetwork/{externalNetwork}/permissions/{permissionName} is deprecated.", DeprecationWarning)
+
+ _param = self._remove_permission_by_email_serialize(
+ advisor_email_address=advisor_email_address,
+ external_network=external_network,
+ permission_name=permission_name,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': None,
+ '404': "InlineResponse4043",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ ).data
+
+
+ @validate_call
+ async def remove_permission_by_email_with_http_info(
+ self,
+ advisor_email_address: Annotated[StrictStr, Field(description="Advisor's email address")],
+ external_network: Annotated[StrictStr, Field(description="The external network")],
+ permission_name: Annotated[StrictStr, Field(description="permissionName to remove")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> ApiResponse[None]:
+ """(Deprecated) Remove permission from an advisor (deprecated)
+
+ Remove a permission from an advisor.
+
+ :param advisor_email_address: Advisor's email address (required)
+ :type advisor_email_address: str
+ :param external_network: The external network (required)
+ :type external_network: str
+ :param permission_name: permissionName to remove (required)
+ :type permission_name: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+ warnings.warn("DELETE /api/v1/customer/advisors/advisorEmailAddress/{advisorEmailAddress}/externalNetwork/{externalNetwork}/permissions/{permissionName} is deprecated.", DeprecationWarning)
+
+ _param = self._remove_permission_by_email_serialize(
+ advisor_email_address=advisor_email_address,
+ external_network=external_network,
+ permission_name=permission_name,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': None,
+ '404': "InlineResponse4043",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ )
+
+
+ @validate_call
+ async def remove_permission_by_email_without_preload_content(
+ self,
+ advisor_email_address: Annotated[StrictStr, Field(description="Advisor's email address")],
+ external_network: Annotated[StrictStr, Field(description="The external network")],
+ permission_name: Annotated[StrictStr, Field(description="permissionName to remove")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RESTResponseType:
+ """(Deprecated) Remove permission from an advisor (deprecated)
+
+ Remove a permission from an advisor.
+
+ :param advisor_email_address: Advisor's email address (required)
+ :type advisor_email_address: str
+ :param external_network: The external network (required)
+ :type external_network: str
+ :param permission_name: permissionName to remove (required)
+ :type permission_name: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+ warnings.warn("DELETE /api/v1/customer/advisors/advisorEmailAddress/{advisorEmailAddress}/externalNetwork/{externalNetwork}/permissions/{permissionName} is deprecated.", DeprecationWarning)
+
+ _param = self._remove_permission_by_email_serialize(
+ advisor_email_address=advisor_email_address,
+ external_network=external_network,
+ permission_name=permission_name,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': None,
+ '404': "InlineResponse4043",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ return response_data.response
+
+
+ def _remove_permission_by_email_serialize(
+ self,
+ advisor_email_address,
+ external_network,
+ permission_name,
+ _request_auth,
+ _content_type,
+ _headers,
+ _host_index,
+ ) -> RequestSerialized:
+
+ _host = None
+
+ _collection_formats: Dict[str, str] = {
+ }
+
+ _path_params: Dict[str, str] = {}
+ _query_params: List[Tuple[str, str]] = []
+ _header_params: Dict[str, Optional[str]] = _headers or {}
+ _form_params: List[Tuple[str, str]] = []
+ _files: Dict[
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
+ ] = {}
+ _body_params: Optional[bytes] = None
+
+ # process the path parameters
+ if advisor_email_address is not None:
+ _path_params['advisorEmailAddress'] = advisor_email_address
+ if external_network is not None:
+ _path_params['externalNetwork'] = external_network
+ if permission_name is not None:
+ _path_params['permissionName'] = permission_name
+ # process the query parameters
+ # process the header parameters
+ # process the form parameters
+ # process the body parameter
+
+
+ # set the HTTP header `Accept`
+ if 'Accept' not in _header_params:
+ _header_params['Accept'] = self.api_client.select_header_accept(
+ [
+ 'application/json'
+ ]
+ )
+
+
+ # authentication setting
+ _auth_settings: List[str] = [
+ 'sfsAuthentication'
+ ]
+
+ return self.api_client.param_serialize(
+ method='DELETE',
+ resource_path='/api/v1/customer/advisors/advisorEmailAddress/{advisorEmailAddress}/externalNetwork/{externalNetwork}/permissions/{permissionName}',
+ path_params=_path_params,
+ query_params=_query_params,
+ header_params=_header_params,
+ body=_body_params,
+ post_params=_form_params,
+ files=_files,
+ auth_settings=_auth_settings,
+ collection_formats=_collection_formats,
+ _host=_host,
+ _request_auth=_request_auth
+ )
+
+
+
+
+ @validate_call
+ async def remove_permission_by_symphony_idv2(
+ self,
+ advisor_symphony_id: Annotated[StrictStr, Field(description="Advisor's Symphony user ID")],
+ external_network: Annotated[StrictStr, Field(description="The external network")],
+ permission_name: Annotated[StrictStr, Field(description="permissionName to remove")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> None:
+ """Remove permission (recommended)
+
+ Remove a permission from an advisor.
+
+ :param advisor_symphony_id: Advisor's Symphony user ID (required)
+ :type advisor_symphony_id: str
+ :param external_network: The external network (required)
+ :type external_network: str
+ :param permission_name: permissionName to remove (required)
+ :type permission_name: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._remove_permission_by_symphony_idv2_serialize(
+ advisor_symphony_id=advisor_symphony_id,
+ external_network=external_network,
+ permission_name=permission_name,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '204': None,
+ '404': "InlineResponse4043",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ ).data
+
+
+ @validate_call
+ async def remove_permission_by_symphony_idv2_with_http_info(
+ self,
+ advisor_symphony_id: Annotated[StrictStr, Field(description="Advisor's Symphony user ID")],
+ external_network: Annotated[StrictStr, Field(description="The external network")],
+ permission_name: Annotated[StrictStr, Field(description="permissionName to remove")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> ApiResponse[None]:
+ """Remove permission (recommended)
+
+ Remove a permission from an advisor.
+
+ :param advisor_symphony_id: Advisor's Symphony user ID (required)
+ :type advisor_symphony_id: str
+ :param external_network: The external network (required)
+ :type external_network: str
+ :param permission_name: permissionName to remove (required)
+ :type permission_name: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._remove_permission_by_symphony_idv2_serialize(
+ advisor_symphony_id=advisor_symphony_id,
+ external_network=external_network,
+ permission_name=permission_name,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '204': None,
+ '404': "InlineResponse4043",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ )
+
+
+ @validate_call
+ async def remove_permission_by_symphony_idv2_without_preload_content(
+ self,
+ advisor_symphony_id: Annotated[StrictStr, Field(description="Advisor's Symphony user ID")],
+ external_network: Annotated[StrictStr, Field(description="The external network")],
+ permission_name: Annotated[StrictStr, Field(description="permissionName to remove")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RESTResponseType:
+ """Remove permission (recommended)
+
+ Remove a permission from an advisor.
+
+ :param advisor_symphony_id: Advisor's Symphony user ID (required)
+ :type advisor_symphony_id: str
+ :param external_network: The external network (required)
+ :type external_network: str
+ :param permission_name: permissionName to remove (required)
+ :type permission_name: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._remove_permission_by_symphony_idv2_serialize(
+ advisor_symphony_id=advisor_symphony_id,
+ external_network=external_network,
+ permission_name=permission_name,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '204': None,
+ '404': "InlineResponse4043",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ return response_data.response
+
+
+ def _remove_permission_by_symphony_idv2_serialize(
+ self,
+ advisor_symphony_id,
+ external_network,
+ permission_name,
+ _request_auth,
+ _content_type,
+ _headers,
+ _host_index,
+ ) -> RequestSerialized:
+
+ _host = None
+
+ _collection_formats: Dict[str, str] = {
+ }
+
+ _path_params: Dict[str, str] = {}
+ _query_params: List[Tuple[str, str]] = []
+ _header_params: Dict[str, Optional[str]] = _headers or {}
+ _form_params: List[Tuple[str, str]] = []
+ _files: Dict[
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
+ ] = {}
+ _body_params: Optional[bytes] = None
+
+ # process the path parameters
+ if advisor_symphony_id is not None:
+ _path_params['advisorSymphonyId'] = advisor_symphony_id
+ if external_network is not None:
+ _path_params['externalNetwork'] = external_network
+ if permission_name is not None:
+ _path_params['permissionName'] = permission_name
+ # process the query parameters
+ # process the header parameters
+ # process the form parameters
+ # process the body parameter
+
+
+ # set the HTTP header `Accept`
+ if 'Accept' not in _header_params:
+ _header_params['Accept'] = self.api_client.select_header_accept(
+ [
+ 'application/json'
+ ]
+ )
+
+
+ # authentication setting
+ _auth_settings: List[str] = [
+ 'sfsAuthentication'
+ ]
+
+ return self.api_client.param_serialize(
+ method='DELETE',
+ resource_path='/api/v2/customer/advisors/{advisorSymphonyId}/externalNetwork/{externalNetwork}/permissions/{permissionName}',
+ path_params=_path_params,
+ query_params=_query_params,
+ header_params=_header_params,
+ body=_body_params,
+ post_params=_form_params,
+ files=_files,
+ auth_settings=_auth_settings,
+ collection_formats=_collection_formats,
+ _host=_host,
+ _request_auth=_request_auth
+ )
+
+
diff --git a/symphony/bdk/gen/federation_api/room_api.py b/symphony/bdk/gen/federation_api/room_api.py
new file mode 100644
index 00000000..58f20cf9
--- /dev/null
+++ b/symphony/bdk/gen/federation_api/room_api.py
@@ -0,0 +1,4350 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+import warnings
+from pydantic import validate_call, Field, StrictFloat, StrictStr, StrictInt
+from typing import Any, Dict, List, Optional, Tuple, Union
+from typing_extensions import Annotated
+
+from decimal import Decimal
+from pydantic import Field, StrictBool, StrictFloat, StrictInt, StrictStr
+from typing import Optional, Union
+from typing_extensions import Annotated
+from symphony.bdk.gen.federation_model.bulk_room_member_multi_room_request import BulkRoomMemberMultiRoomRequest
+from symphony.bdk.gen.federation_model.bulk_room_member_multi_room_requestv2 import BulkRoomMemberMultiRoomRequestv2
+from symphony.bdk.gen.federation_model.bulk_room_member_response import BulkRoomMemberResponse
+from symphony.bdk.gen.federation_model.bulk_room_member_responsev2 import BulkRoomMemberResponsev2
+from symphony.bdk.gen.federation_model.remove_room_members_response import RemoveRoomMembersResponse
+from symphony.bdk.gen.federation_model.rename_room_request import RenameRoomRequest
+from symphony.bdk.gen.federation_model.rename_room_response import RenameRoomResponse
+from symphony.bdk.gen.federation_model.room_creation_response import RoomCreationResponse
+from symphony.bdk.gen.federation_model.room_creation_response_v2 import RoomCreationResponseV2
+from symphony.bdk.gen.federation_model.room_features_request import RoomFeaturesRequest
+from symphony.bdk.gen.federation_model.room_member_request import RoomMemberRequest
+from symphony.bdk.gen.federation_model.room_member_requestv2 import RoomMemberRequestv2
+from symphony.bdk.gen.federation_model.room_member_response import RoomMemberResponse
+from symphony.bdk.gen.federation_model.room_members_response import RoomMembersResponse
+from symphony.bdk.gen.federation_model.room_request import RoomRequest
+from symphony.bdk.gen.federation_model.room_requestv2 import RoomRequestv2
+from symphony.bdk.gen.federation_model.rooms_response import RoomsResponse
+from symphony.bdk.gen.federation_model.transfer_room_ownership_request import TransferRoomOwnershipRequest
+
+from symphony.bdk.gen.api_client import ApiClient, RequestSerialized
+from symphony.bdk.gen.api_response import ApiResponse
+from symphony.bdk.gen.rest import RESTResponseType
+
+
+class RoomApi:
+ """NOTE: This class is auto generated by OpenAPI Generator
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+ """
+
+ def __init__(self, api_client=None) -> None:
+ if api_client is None:
+ api_client = ApiClient.get_default()
+ self.api_client = api_client
+
+
+ @validate_call
+ async def add_room_member_multi_room(
+ self,
+ room_member_request: Optional[RoomMemberRequest] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RoomMemberResponse:
+ """(Deprecated) Add room member (deprecated)
+
+ Add a member to a room: - An advisor must be entitled for the relevant external network.
- A contact must have already been onboarded.
+
+ :param room_member_request:
+ :type room_member_request: RoomMemberRequest
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+ warnings.warn("POST /api/v1/customer/rooms/members is deprecated.", DeprecationWarning)
+
+ _param = self._add_room_member_multi_room_serialize(
+ room_member_request=room_member_request,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "RoomMemberResponse",
+ '400': "InlineResponse4003",
+ '403': "AddRoomMemberMultiRoomv2403Response",
+ '401': "Unauthorized",
+ '404': "InlineResponse4049",
+ '409': "MemberAlreadyInRoom",
+ '500': "AddRoomMemberFailed",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ ).data
+
+
+ @validate_call
+ async def add_room_member_multi_room_with_http_info(
+ self,
+ room_member_request: Optional[RoomMemberRequest] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> ApiResponse[RoomMemberResponse]:
+ """(Deprecated) Add room member (deprecated)
+
+ Add a member to a room: - An advisor must be entitled for the relevant external network.
- A contact must have already been onboarded.
+
+ :param room_member_request:
+ :type room_member_request: RoomMemberRequest
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+ warnings.warn("POST /api/v1/customer/rooms/members is deprecated.", DeprecationWarning)
+
+ _param = self._add_room_member_multi_room_serialize(
+ room_member_request=room_member_request,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "RoomMemberResponse",
+ '400': "InlineResponse4003",
+ '403': "AddRoomMemberMultiRoomv2403Response",
+ '401': "Unauthorized",
+ '404': "InlineResponse4049",
+ '409': "MemberAlreadyInRoom",
+ '500': "AddRoomMemberFailed",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ )
+
+
+ @validate_call
+ async def add_room_member_multi_room_without_preload_content(
+ self,
+ room_member_request: Optional[RoomMemberRequest] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RESTResponseType:
+ """(Deprecated) Add room member (deprecated)
+
+ Add a member to a room: - An advisor must be entitled for the relevant external network.
- A contact must have already been onboarded.
+
+ :param room_member_request:
+ :type room_member_request: RoomMemberRequest
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+ warnings.warn("POST /api/v1/customer/rooms/members is deprecated.", DeprecationWarning)
+
+ _param = self._add_room_member_multi_room_serialize(
+ room_member_request=room_member_request,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "RoomMemberResponse",
+ '400': "InlineResponse4003",
+ '403': "AddRoomMemberMultiRoomv2403Response",
+ '401': "Unauthorized",
+ '404': "InlineResponse4049",
+ '409': "MemberAlreadyInRoom",
+ '500': "AddRoomMemberFailed",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ return response_data.response
+
+
+ def _add_room_member_multi_room_serialize(
+ self,
+ room_member_request,
+ _request_auth,
+ _content_type,
+ _headers,
+ _host_index,
+ ) -> RequestSerialized:
+
+ _host = None
+
+ _collection_formats: Dict[str, str] = {
+ }
+
+ _path_params: Dict[str, str] = {}
+ _query_params: List[Tuple[str, str]] = []
+ _header_params: Dict[str, Optional[str]] = _headers or {}
+ _form_params: List[Tuple[str, str]] = []
+ _files: Dict[
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
+ ] = {}
+ _body_params: Optional[bytes] = None
+
+ # process the path parameters
+ # process the query parameters
+ # process the header parameters
+ # process the form parameters
+ # process the body parameter
+ if room_member_request is not None:
+ _body_params = room_member_request
+
+
+ # set the HTTP header `Accept`
+ if 'Accept' not in _header_params:
+ _header_params['Accept'] = self.api_client.select_header_accept(
+ [
+ 'application/json'
+ ]
+ )
+
+ # set the HTTP header `Content-Type`
+ if _content_type:
+ _header_params['Content-Type'] = _content_type
+ else:
+ _default_content_type = (
+ self.api_client.select_header_content_type(
+ [
+ 'application/json'
+ ]
+ )
+ )
+ if _default_content_type is not None:
+ _header_params['Content-Type'] = _default_content_type
+
+ # authentication setting
+ _auth_settings: List[str] = [
+ 'sfsAuthentication'
+ ]
+
+ return self.api_client.param_serialize(
+ method='POST',
+ resource_path='/api/v1/customer/rooms/members',
+ path_params=_path_params,
+ query_params=_query_params,
+ header_params=_header_params,
+ body=_body_params,
+ post_params=_form_params,
+ files=_files,
+ auth_settings=_auth_settings,
+ collection_formats=_collection_formats,
+ _host=_host,
+ _request_auth=_request_auth
+ )
+
+
+
+
+ @validate_call
+ async def add_room_member_multi_roomv2(
+ self,
+ stream_id: Annotated[StrictStr, Field(description="Room's streamId. The streamID needs to be URLsafe Base64. To obtain the URLSafe Base64 conversation ID: - Replace forward slashes / with underscores _ - Replace pluses + with minuses - - Ignore any trailing equal signs = For example, the URLSafe Base64 encoding of: lX1hwfmQ+AK/k/a/BB0y2n///q2+0KfbdA== converts to lX1hwfmQ-AK_k_a_BB0y2n___q2-0KfbdA. ")],
+ room_member_requestv2: Optional[RoomMemberRequestv2] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RoomMemberResponse:
+ """Add room member (recommended)
+
+ Add a member to a room: - An advisor must be entitled for the relevant external network.
- A contact must have already been onboarded.
+
+ :param stream_id: Room's streamId. The streamID needs to be URLsafe Base64. To obtain the URLSafe Base64 conversation ID: - Replace forward slashes / with underscores _ - Replace pluses + with minuses - - Ignore any trailing equal signs = For example, the URLSafe Base64 encoding of: lX1hwfmQ+AK/k/a/BB0y2n///q2+0KfbdA== converts to lX1hwfmQ-AK_k_a_BB0y2n___q2-0KfbdA. (required)
+ :type stream_id: str
+ :param room_member_requestv2:
+ :type room_member_requestv2: RoomMemberRequestv2
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._add_room_member_multi_roomv2_serialize(
+ stream_id=stream_id,
+ room_member_requestv2=room_member_requestv2,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "RoomMemberResponse",
+ '400': "InlineResponse4003",
+ '403': "AddRoomMemberMultiRoomv2403Response",
+ '401': "Unauthorized",
+ '404': "InlineResponse4049",
+ '409': "AddRoomMemberMultiRoomv2409Response",
+ '500': "AddRoomMemberFailed",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ ).data
+
+
+ @validate_call
+ async def add_room_member_multi_roomv2_with_http_info(
+ self,
+ stream_id: Annotated[StrictStr, Field(description="Room's streamId. The streamID needs to be URLsafe Base64. To obtain the URLSafe Base64 conversation ID: - Replace forward slashes / with underscores _ - Replace pluses + with minuses - - Ignore any trailing equal signs = For example, the URLSafe Base64 encoding of: lX1hwfmQ+AK/k/a/BB0y2n///q2+0KfbdA== converts to lX1hwfmQ-AK_k_a_BB0y2n___q2-0KfbdA. ")],
+ room_member_requestv2: Optional[RoomMemberRequestv2] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> ApiResponse[RoomMemberResponse]:
+ """Add room member (recommended)
+
+ Add a member to a room: - An advisor must be entitled for the relevant external network.
- A contact must have already been onboarded.
+
+ :param stream_id: Room's streamId. The streamID needs to be URLsafe Base64. To obtain the URLSafe Base64 conversation ID: - Replace forward slashes / with underscores _ - Replace pluses + with minuses - - Ignore any trailing equal signs = For example, the URLSafe Base64 encoding of: lX1hwfmQ+AK/k/a/BB0y2n///q2+0KfbdA== converts to lX1hwfmQ-AK_k_a_BB0y2n___q2-0KfbdA. (required)
+ :type stream_id: str
+ :param room_member_requestv2:
+ :type room_member_requestv2: RoomMemberRequestv2
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._add_room_member_multi_roomv2_serialize(
+ stream_id=stream_id,
+ room_member_requestv2=room_member_requestv2,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "RoomMemberResponse",
+ '400': "InlineResponse4003",
+ '403': "AddRoomMemberMultiRoomv2403Response",
+ '401': "Unauthorized",
+ '404': "InlineResponse4049",
+ '409': "AddRoomMemberMultiRoomv2409Response",
+ '500': "AddRoomMemberFailed",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ )
+
+
+ @validate_call
+ async def add_room_member_multi_roomv2_without_preload_content(
+ self,
+ stream_id: Annotated[StrictStr, Field(description="Room's streamId. The streamID needs to be URLsafe Base64. To obtain the URLSafe Base64 conversation ID: - Replace forward slashes / with underscores _ - Replace pluses + with minuses - - Ignore any trailing equal signs = For example, the URLSafe Base64 encoding of: lX1hwfmQ+AK/k/a/BB0y2n///q2+0KfbdA== converts to lX1hwfmQ-AK_k_a_BB0y2n___q2-0KfbdA. ")],
+ room_member_requestv2: Optional[RoomMemberRequestv2] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RESTResponseType:
+ """Add room member (recommended)
+
+ Add a member to a room: - An advisor must be entitled for the relevant external network.
- A contact must have already been onboarded.
+
+ :param stream_id: Room's streamId. The streamID needs to be URLsafe Base64. To obtain the URLSafe Base64 conversation ID: - Replace forward slashes / with underscores _ - Replace pluses + with minuses - - Ignore any trailing equal signs = For example, the URLSafe Base64 encoding of: lX1hwfmQ+AK/k/a/BB0y2n///q2+0KfbdA== converts to lX1hwfmQ-AK_k_a_BB0y2n___q2-0KfbdA. (required)
+ :type stream_id: str
+ :param room_member_requestv2:
+ :type room_member_requestv2: RoomMemberRequestv2
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._add_room_member_multi_roomv2_serialize(
+ stream_id=stream_id,
+ room_member_requestv2=room_member_requestv2,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "RoomMemberResponse",
+ '400': "InlineResponse4003",
+ '403': "AddRoomMemberMultiRoomv2403Response",
+ '401': "Unauthorized",
+ '404': "InlineResponse4049",
+ '409': "AddRoomMemberMultiRoomv2409Response",
+ '500': "AddRoomMemberFailed",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ return response_data.response
+
+
+ def _add_room_member_multi_roomv2_serialize(
+ self,
+ stream_id,
+ room_member_requestv2,
+ _request_auth,
+ _content_type,
+ _headers,
+ _host_index,
+ ) -> RequestSerialized:
+
+ _host = None
+
+ _collection_formats: Dict[str, str] = {
+ }
+
+ _path_params: Dict[str, str] = {}
+ _query_params: List[Tuple[str, str]] = []
+ _header_params: Dict[str, Optional[str]] = _headers or {}
+ _form_params: List[Tuple[str, str]] = []
+ _files: Dict[
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
+ ] = {}
+ _body_params: Optional[bytes] = None
+
+ # process the path parameters
+ if stream_id is not None:
+ _path_params['streamId'] = stream_id
+ # process the query parameters
+ # process the header parameters
+ # process the form parameters
+ # process the body parameter
+ if room_member_requestv2 is not None:
+ _body_params = room_member_requestv2
+
+
+ # set the HTTP header `Accept`
+ if 'Accept' not in _header_params:
+ _header_params['Accept'] = self.api_client.select_header_accept(
+ [
+ 'application/json'
+ ]
+ )
+
+ # set the HTTP header `Content-Type`
+ if _content_type:
+ _header_params['Content-Type'] = _content_type
+ else:
+ _default_content_type = (
+ self.api_client.select_header_content_type(
+ [
+ 'application/json'
+ ]
+ )
+ )
+ if _default_content_type is not None:
+ _header_params['Content-Type'] = _default_content_type
+
+ # authentication setting
+ _auth_settings: List[str] = [
+ 'sfsAuthentication'
+ ]
+
+ return self.api_client.param_serialize(
+ method='POST',
+ resource_path='/api/v2/customer/rooms/{streamId}/members',
+ path_params=_path_params,
+ query_params=_query_params,
+ header_params=_header_params,
+ body=_body_params,
+ post_params=_form_params,
+ files=_files,
+ auth_settings=_auth_settings,
+ collection_formats=_collection_formats,
+ _host=_host,
+ _request_auth=_request_auth
+ )
+
+
+
+
+ @validate_call
+ async def add_room_members_multi_room(
+ self,
+ bulk_room_member_multi_room_request: Optional[BulkRoomMemberMultiRoomRequest] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> BulkRoomMemberResponse:
+ """(Deprecated) Add room members in bulk (deprecated)
+
+ Add multiple members to a room: - Advisors must be entitled for the relevant external network.
- Contacts must have already been onboarded.
Returns a report indicating the success or failure for each element of the array.
+
+ :param bulk_room_member_multi_room_request:
+ :type bulk_room_member_multi_room_request: BulkRoomMemberMultiRoomRequest
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+ warnings.warn("POST /api/v1/customer/rooms/members/bulk is deprecated.", DeprecationWarning)
+
+ _param = self._add_room_members_multi_room_serialize(
+ bulk_room_member_multi_room_request=bulk_room_member_multi_room_request,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "BulkRoomMemberResponse",
+ '400': "RfcError",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ ).data
+
+
+ @validate_call
+ async def add_room_members_multi_room_with_http_info(
+ self,
+ bulk_room_member_multi_room_request: Optional[BulkRoomMemberMultiRoomRequest] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> ApiResponse[BulkRoomMemberResponse]:
+ """(Deprecated) Add room members in bulk (deprecated)
+
+ Add multiple members to a room: - Advisors must be entitled for the relevant external network.
- Contacts must have already been onboarded.
Returns a report indicating the success or failure for each element of the array.
+
+ :param bulk_room_member_multi_room_request:
+ :type bulk_room_member_multi_room_request: BulkRoomMemberMultiRoomRequest
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+ warnings.warn("POST /api/v1/customer/rooms/members/bulk is deprecated.", DeprecationWarning)
+
+ _param = self._add_room_members_multi_room_serialize(
+ bulk_room_member_multi_room_request=bulk_room_member_multi_room_request,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "BulkRoomMemberResponse",
+ '400': "RfcError",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ )
+
+
+ @validate_call
+ async def add_room_members_multi_room_without_preload_content(
+ self,
+ bulk_room_member_multi_room_request: Optional[BulkRoomMemberMultiRoomRequest] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RESTResponseType:
+ """(Deprecated) Add room members in bulk (deprecated)
+
+ Add multiple members to a room: - Advisors must be entitled for the relevant external network.
- Contacts must have already been onboarded.
Returns a report indicating the success or failure for each element of the array.
+
+ :param bulk_room_member_multi_room_request:
+ :type bulk_room_member_multi_room_request: BulkRoomMemberMultiRoomRequest
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+ warnings.warn("POST /api/v1/customer/rooms/members/bulk is deprecated.", DeprecationWarning)
+
+ _param = self._add_room_members_multi_room_serialize(
+ bulk_room_member_multi_room_request=bulk_room_member_multi_room_request,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "BulkRoomMemberResponse",
+ '400': "RfcError",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ return response_data.response
+
+
+ def _add_room_members_multi_room_serialize(
+ self,
+ bulk_room_member_multi_room_request,
+ _request_auth,
+ _content_type,
+ _headers,
+ _host_index,
+ ) -> RequestSerialized:
+
+ _host = None
+
+ _collection_formats: Dict[str, str] = {
+ }
+
+ _path_params: Dict[str, str] = {}
+ _query_params: List[Tuple[str, str]] = []
+ _header_params: Dict[str, Optional[str]] = _headers or {}
+ _form_params: List[Tuple[str, str]] = []
+ _files: Dict[
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
+ ] = {}
+ _body_params: Optional[bytes] = None
+
+ # process the path parameters
+ # process the query parameters
+ # process the header parameters
+ # process the form parameters
+ # process the body parameter
+ if bulk_room_member_multi_room_request is not None:
+ _body_params = bulk_room_member_multi_room_request
+
+
+ # set the HTTP header `Accept`
+ if 'Accept' not in _header_params:
+ _header_params['Accept'] = self.api_client.select_header_accept(
+ [
+ 'application/json'
+ ]
+ )
+
+ # set the HTTP header `Content-Type`
+ if _content_type:
+ _header_params['Content-Type'] = _content_type
+ else:
+ _default_content_type = (
+ self.api_client.select_header_content_type(
+ [
+ 'application/json'
+ ]
+ )
+ )
+ if _default_content_type is not None:
+ _header_params['Content-Type'] = _default_content_type
+
+ # authentication setting
+ _auth_settings: List[str] = [
+ 'sfsAuthentication'
+ ]
+
+ return self.api_client.param_serialize(
+ method='POST',
+ resource_path='/api/v1/customer/rooms/members/bulk',
+ path_params=_path_params,
+ query_params=_query_params,
+ header_params=_header_params,
+ body=_body_params,
+ post_params=_form_params,
+ files=_files,
+ auth_settings=_auth_settings,
+ collection_formats=_collection_formats,
+ _host=_host,
+ _request_auth=_request_auth
+ )
+
+
+
+
+ @validate_call
+ async def add_room_members_multi_roomv2(
+ self,
+ bulk_room_member_multi_room_requestv2: Optional[BulkRoomMemberMultiRoomRequestv2] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> BulkRoomMemberResponsev2:
+ """Add room members in bulk (recommended)
+
+ Add multiple advisors and/or contacts to a room.
An advisor must be entitled for the relevant external network. A contact must have already been onboarded.
+
+ :param bulk_room_member_multi_room_requestv2:
+ :type bulk_room_member_multi_room_requestv2: BulkRoomMemberMultiRoomRequestv2
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._add_room_members_multi_roomv2_serialize(
+ bulk_room_member_multi_room_requestv2=bulk_room_member_multi_room_requestv2,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "BulkRoomMemberResponsev2",
+ '400': "RfcError",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ ).data
+
+
+ @validate_call
+ async def add_room_members_multi_roomv2_with_http_info(
+ self,
+ bulk_room_member_multi_room_requestv2: Optional[BulkRoomMemberMultiRoomRequestv2] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> ApiResponse[BulkRoomMemberResponsev2]:
+ """Add room members in bulk (recommended)
+
+ Add multiple advisors and/or contacts to a room.
An advisor must be entitled for the relevant external network. A contact must have already been onboarded.
+
+ :param bulk_room_member_multi_room_requestv2:
+ :type bulk_room_member_multi_room_requestv2: BulkRoomMemberMultiRoomRequestv2
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._add_room_members_multi_roomv2_serialize(
+ bulk_room_member_multi_room_requestv2=bulk_room_member_multi_room_requestv2,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "BulkRoomMemberResponsev2",
+ '400': "RfcError",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ )
+
+
+ @validate_call
+ async def add_room_members_multi_roomv2_without_preload_content(
+ self,
+ bulk_room_member_multi_room_requestv2: Optional[BulkRoomMemberMultiRoomRequestv2] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RESTResponseType:
+ """Add room members in bulk (recommended)
+
+ Add multiple advisors and/or contacts to a room.
An advisor must be entitled for the relevant external network. A contact must have already been onboarded.
+
+ :param bulk_room_member_multi_room_requestv2:
+ :type bulk_room_member_multi_room_requestv2: BulkRoomMemberMultiRoomRequestv2
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._add_room_members_multi_roomv2_serialize(
+ bulk_room_member_multi_room_requestv2=bulk_room_member_multi_room_requestv2,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "BulkRoomMemberResponsev2",
+ '400': "RfcError",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ return response_data.response
+
+
+ def _add_room_members_multi_roomv2_serialize(
+ self,
+ bulk_room_member_multi_room_requestv2,
+ _request_auth,
+ _content_type,
+ _headers,
+ _host_index,
+ ) -> RequestSerialized:
+
+ _host = None
+
+ _collection_formats: Dict[str, str] = {
+ }
+
+ _path_params: Dict[str, str] = {}
+ _query_params: List[Tuple[str, str]] = []
+ _header_params: Dict[str, Optional[str]] = _headers or {}
+ _form_params: List[Tuple[str, str]] = []
+ _files: Dict[
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
+ ] = {}
+ _body_params: Optional[bytes] = None
+
+ # process the path parameters
+ # process the query parameters
+ # process the header parameters
+ # process the form parameters
+ # process the body parameter
+ if bulk_room_member_multi_room_requestv2 is not None:
+ _body_params = bulk_room_member_multi_room_requestv2
+
+
+ # set the HTTP header `Accept`
+ if 'Accept' not in _header_params:
+ _header_params['Accept'] = self.api_client.select_header_accept(
+ [
+ 'application/json'
+ ]
+ )
+
+ # set the HTTP header `Content-Type`
+ if _content_type:
+ _header_params['Content-Type'] = _content_type
+ else:
+ _default_content_type = (
+ self.api_client.select_header_content_type(
+ [
+ 'application/json'
+ ]
+ )
+ )
+ if _default_content_type is not None:
+ _header_params['Content-Type'] = _default_content_type
+
+ # authentication setting
+ _auth_settings: List[str] = [
+ 'sfsAuthentication'
+ ]
+
+ return self.api_client.param_serialize(
+ method='POST',
+ resource_path='/api/v2/customer/rooms/members',
+ path_params=_path_params,
+ query_params=_query_params,
+ header_params=_header_params,
+ body=_body_params,
+ post_params=_form_params,
+ files=_files,
+ auth_settings=_auth_settings,
+ collection_formats=_collection_formats,
+ _host=_host,
+ _request_auth=_request_auth
+ )
+
+
+
+
+ @validate_call
+ async def create_room(
+ self,
+ room_request: Optional[RoomRequest] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RoomCreationResponse:
+ """(Deprecated) Create room (deprecated)
+
+ Create a room with the advisor whose email address is provided.
The advisor is set as a member.
+
+ :param room_request:
+ :type room_request: RoomRequest
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+ warnings.warn("POST /api/v1/customer/rooms is deprecated.", DeprecationWarning)
+
+ _param = self._create_room_serialize(
+ room_request=room_request,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "RoomCreationResponse",
+ '400': "ConnectionNotAccepted",
+ '403': "CreateRoom403Response",
+ '401': "Unauthorized",
+ '404': "CreateRoomv2404Response",
+ '409': "RoomAlreadyExists",
+ '500': "InlineResponse500",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ ).data
+
+
+ @validate_call
+ async def create_room_with_http_info(
+ self,
+ room_request: Optional[RoomRequest] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> ApiResponse[RoomCreationResponse]:
+ """(Deprecated) Create room (deprecated)
+
+ Create a room with the advisor whose email address is provided.
The advisor is set as a member.
+
+ :param room_request:
+ :type room_request: RoomRequest
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+ warnings.warn("POST /api/v1/customer/rooms is deprecated.", DeprecationWarning)
+
+ _param = self._create_room_serialize(
+ room_request=room_request,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "RoomCreationResponse",
+ '400': "ConnectionNotAccepted",
+ '403': "CreateRoom403Response",
+ '401': "Unauthorized",
+ '404': "CreateRoomv2404Response",
+ '409': "RoomAlreadyExists",
+ '500': "InlineResponse500",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ )
+
+
+ @validate_call
+ async def create_room_without_preload_content(
+ self,
+ room_request: Optional[RoomRequest] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RESTResponseType:
+ """(Deprecated) Create room (deprecated)
+
+ Create a room with the advisor whose email address is provided.
The advisor is set as a member.
+
+ :param room_request:
+ :type room_request: RoomRequest
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+ warnings.warn("POST /api/v1/customer/rooms is deprecated.", DeprecationWarning)
+
+ _param = self._create_room_serialize(
+ room_request=room_request,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "RoomCreationResponse",
+ '400': "ConnectionNotAccepted",
+ '403': "CreateRoom403Response",
+ '401': "Unauthorized",
+ '404': "CreateRoomv2404Response",
+ '409': "RoomAlreadyExists",
+ '500': "InlineResponse500",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ return response_data.response
+
+
+ def _create_room_serialize(
+ self,
+ room_request,
+ _request_auth,
+ _content_type,
+ _headers,
+ _host_index,
+ ) -> RequestSerialized:
+
+ _host = None
+
+ _collection_formats: Dict[str, str] = {
+ }
+
+ _path_params: Dict[str, str] = {}
+ _query_params: List[Tuple[str, str]] = []
+ _header_params: Dict[str, Optional[str]] = _headers or {}
+ _form_params: List[Tuple[str, str]] = []
+ _files: Dict[
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
+ ] = {}
+ _body_params: Optional[bytes] = None
+
+ # process the path parameters
+ # process the query parameters
+ # process the header parameters
+ # process the form parameters
+ # process the body parameter
+ if room_request is not None:
+ _body_params = room_request
+
+
+ # set the HTTP header `Accept`
+ if 'Accept' not in _header_params:
+ _header_params['Accept'] = self.api_client.select_header_accept(
+ [
+ 'application/json'
+ ]
+ )
+
+ # set the HTTP header `Content-Type`
+ if _content_type:
+ _header_params['Content-Type'] = _content_type
+ else:
+ _default_content_type = (
+ self.api_client.select_header_content_type(
+ [
+ 'application/json'
+ ]
+ )
+ )
+ if _default_content_type is not None:
+ _header_params['Content-Type'] = _default_content_type
+
+ # authentication setting
+ _auth_settings: List[str] = [
+ 'sfsAuthentication'
+ ]
+
+ return self.api_client.param_serialize(
+ method='POST',
+ resource_path='/api/v1/customer/rooms',
+ path_params=_path_params,
+ query_params=_query_params,
+ header_params=_header_params,
+ body=_body_params,
+ post_params=_form_params,
+ files=_files,
+ auth_settings=_auth_settings,
+ collection_formats=_collection_formats,
+ _host=_host,
+ _request_auth=_request_auth
+ )
+
+
+
+
+ @validate_call
+ async def create_roomv2(
+ self,
+ room_requestv2: Optional[RoomRequestv2] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RoomCreationResponseV2:
+ """Create room (recommended)
+
+ Create a room with the advisor whose Symphony user ID is provided.
The advisor is set as a member.
\"externalNetworkRoomDisplayName\" applies for WeChat only.
+
+ :param room_requestv2:
+ :type room_requestv2: RoomRequestv2
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._create_roomv2_serialize(
+ room_requestv2=room_requestv2,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "RoomCreationResponseV2",
+ '400': "CreateRoomv2400Response",
+ '403': "CreateRoomv2403Response",
+ '401': "Unauthorized",
+ '404': "CreateRoomv2404Response",
+ '409': "RoomAlreadyExists",
+ '500': "InlineResponse500",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ ).data
+
+
+ @validate_call
+ async def create_roomv2_with_http_info(
+ self,
+ room_requestv2: Optional[RoomRequestv2] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> ApiResponse[RoomCreationResponseV2]:
+ """Create room (recommended)
+
+ Create a room with the advisor whose Symphony user ID is provided.
The advisor is set as a member.
\"externalNetworkRoomDisplayName\" applies for WeChat only.
+
+ :param room_requestv2:
+ :type room_requestv2: RoomRequestv2
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._create_roomv2_serialize(
+ room_requestv2=room_requestv2,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "RoomCreationResponseV2",
+ '400': "CreateRoomv2400Response",
+ '403': "CreateRoomv2403Response",
+ '401': "Unauthorized",
+ '404': "CreateRoomv2404Response",
+ '409': "RoomAlreadyExists",
+ '500': "InlineResponse500",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ )
+
+
+ @validate_call
+ async def create_roomv2_without_preload_content(
+ self,
+ room_requestv2: Optional[RoomRequestv2] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RESTResponseType:
+ """Create room (recommended)
+
+ Create a room with the advisor whose Symphony user ID is provided.
The advisor is set as a member.
\"externalNetworkRoomDisplayName\" applies for WeChat only.
+
+ :param room_requestv2:
+ :type room_requestv2: RoomRequestv2
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._create_roomv2_serialize(
+ room_requestv2=room_requestv2,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "RoomCreationResponseV2",
+ '400': "CreateRoomv2400Response",
+ '403': "CreateRoomv2403Response",
+ '401': "Unauthorized",
+ '404': "CreateRoomv2404Response",
+ '409': "RoomAlreadyExists",
+ '500': "InlineResponse500",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ return response_data.response
+
+
+ def _create_roomv2_serialize(
+ self,
+ room_requestv2,
+ _request_auth,
+ _content_type,
+ _headers,
+ _host_index,
+ ) -> RequestSerialized:
+
+ _host = None
+
+ _collection_formats: Dict[str, str] = {
+ }
+
+ _path_params: Dict[str, str] = {}
+ _query_params: List[Tuple[str, str]] = []
+ _header_params: Dict[str, Optional[str]] = _headers or {}
+ _form_params: List[Tuple[str, str]] = []
+ _files: Dict[
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
+ ] = {}
+ _body_params: Optional[bytes] = None
+
+ # process the path parameters
+ # process the query parameters
+ # process the header parameters
+ # process the form parameters
+ # process the body parameter
+ if room_requestv2 is not None:
+ _body_params = room_requestv2
+
+
+ # set the HTTP header `Accept`
+ if 'Accept' not in _header_params:
+ _header_params['Accept'] = self.api_client.select_header_accept(
+ [
+ 'application/json'
+ ]
+ )
+
+ # set the HTTP header `Content-Type`
+ if _content_type:
+ _header_params['Content-Type'] = _content_type
+ else:
+ _default_content_type = (
+ self.api_client.select_header_content_type(
+ [
+ 'application/json'
+ ]
+ )
+ )
+ if _default_content_type is not None:
+ _header_params['Content-Type'] = _default_content_type
+
+ # authentication setting
+ _auth_settings: List[str] = [
+ 'sfsAuthentication'
+ ]
+
+ return self.api_client.param_serialize(
+ method='POST',
+ resource_path='/api/v2/customer/rooms',
+ path_params=_path_params,
+ query_params=_query_params,
+ header_params=_header_params,
+ body=_body_params,
+ post_params=_form_params,
+ files=_files,
+ auth_settings=_auth_settings,
+ collection_formats=_collection_formats,
+ _host=_host,
+ _request_auth=_request_auth
+ )
+
+
+
+
+ @validate_call
+ async def list_room_members(
+ self,
+ stream_id: Annotated[StrictStr, Field(description="Room's streamId. The streamId needs to be URL safe Base64. To obtain the URLSafe Base64 conversation ID: - Replace forward slashes / with underscores _ - Replace pluses + with minuses - - Ignore any trailing equal signs = For example, the URLSafe Base64 encoding of: lX1hwfmQ+AK/k/a/BB0y2n///q2+0KfbdA== converts to lX1hwfmQ-AK_k_a_BB0y2n___q2-0KfbdA. ")],
+ before: Annotated[Optional[StrictStr], Field(description="The before cursor for pagination")] = None,
+ after: Annotated[Optional[StrictStr], Field(description="The after cursor for pagination")] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RoomMembersResponse:
+ """List room members
+
+ List a room’s members. The room is identified by its streamID.
+
+ :param stream_id: Room's streamId. The streamId needs to be URL safe Base64. To obtain the URLSafe Base64 conversation ID: - Replace forward slashes / with underscores _ - Replace pluses + with minuses - - Ignore any trailing equal signs = For example, the URLSafe Base64 encoding of: lX1hwfmQ+AK/k/a/BB0y2n///q2+0KfbdA== converts to lX1hwfmQ-AK_k_a_BB0y2n___q2-0KfbdA. (required)
+ :type stream_id: str
+ :param before: The before cursor for pagination
+ :type before: str
+ :param after: The after cursor for pagination
+ :type after: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._list_room_members_serialize(
+ stream_id=stream_id,
+ before=before,
+ after=after,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "RoomMembersResponse",
+ '400': "InvalidPageCursor",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ ).data
+
+
+ @validate_call
+ async def list_room_members_with_http_info(
+ self,
+ stream_id: Annotated[StrictStr, Field(description="Room's streamId. The streamId needs to be URL safe Base64. To obtain the URLSafe Base64 conversation ID: - Replace forward slashes / with underscores _ - Replace pluses + with minuses - - Ignore any trailing equal signs = For example, the URLSafe Base64 encoding of: lX1hwfmQ+AK/k/a/BB0y2n///q2+0KfbdA== converts to lX1hwfmQ-AK_k_a_BB0y2n___q2-0KfbdA. ")],
+ before: Annotated[Optional[StrictStr], Field(description="The before cursor for pagination")] = None,
+ after: Annotated[Optional[StrictStr], Field(description="The after cursor for pagination")] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> ApiResponse[RoomMembersResponse]:
+ """List room members
+
+ List a room’s members. The room is identified by its streamID.
+
+ :param stream_id: Room's streamId. The streamId needs to be URL safe Base64. To obtain the URLSafe Base64 conversation ID: - Replace forward slashes / with underscores _ - Replace pluses + with minuses - - Ignore any trailing equal signs = For example, the URLSafe Base64 encoding of: lX1hwfmQ+AK/k/a/BB0y2n///q2+0KfbdA== converts to lX1hwfmQ-AK_k_a_BB0y2n___q2-0KfbdA. (required)
+ :type stream_id: str
+ :param before: The before cursor for pagination
+ :type before: str
+ :param after: The after cursor for pagination
+ :type after: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._list_room_members_serialize(
+ stream_id=stream_id,
+ before=before,
+ after=after,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "RoomMembersResponse",
+ '400': "InvalidPageCursor",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ )
+
+
+ @validate_call
+ async def list_room_members_without_preload_content(
+ self,
+ stream_id: Annotated[StrictStr, Field(description="Room's streamId. The streamId needs to be URL safe Base64. To obtain the URLSafe Base64 conversation ID: - Replace forward slashes / with underscores _ - Replace pluses + with minuses - - Ignore any trailing equal signs = For example, the URLSafe Base64 encoding of: lX1hwfmQ+AK/k/a/BB0y2n///q2+0KfbdA== converts to lX1hwfmQ-AK_k_a_BB0y2n___q2-0KfbdA. ")],
+ before: Annotated[Optional[StrictStr], Field(description="The before cursor for pagination")] = None,
+ after: Annotated[Optional[StrictStr], Field(description="The after cursor for pagination")] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RESTResponseType:
+ """List room members
+
+ List a room’s members. The room is identified by its streamID.
+
+ :param stream_id: Room's streamId. The streamId needs to be URL safe Base64. To obtain the URLSafe Base64 conversation ID: - Replace forward slashes / with underscores _ - Replace pluses + with minuses - - Ignore any trailing equal signs = For example, the URLSafe Base64 encoding of: lX1hwfmQ+AK/k/a/BB0y2n///q2+0KfbdA== converts to lX1hwfmQ-AK_k_a_BB0y2n___q2-0KfbdA. (required)
+ :type stream_id: str
+ :param before: The before cursor for pagination
+ :type before: str
+ :param after: The after cursor for pagination
+ :type after: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._list_room_members_serialize(
+ stream_id=stream_id,
+ before=before,
+ after=after,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "RoomMembersResponse",
+ '400': "InvalidPageCursor",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ return response_data.response
+
+
+ def _list_room_members_serialize(
+ self,
+ stream_id,
+ before,
+ after,
+ _request_auth,
+ _content_type,
+ _headers,
+ _host_index,
+ ) -> RequestSerialized:
+
+ _host = None
+
+ _collection_formats: Dict[str, str] = {
+ }
+
+ _path_params: Dict[str, str] = {}
+ _query_params: List[Tuple[str, str]] = []
+ _header_params: Dict[str, Optional[str]] = _headers or {}
+ _form_params: List[Tuple[str, str]] = []
+ _files: Dict[
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
+ ] = {}
+ _body_params: Optional[bytes] = None
+
+ # process the path parameters
+ if stream_id is not None:
+ _path_params['streamId'] = stream_id
+ # process the query parameters
+ if before is not None:
+
+ _query_params.append(('before', before))
+
+ if after is not None:
+
+ _query_params.append(('after', after))
+
+ # process the header parameters
+ # process the form parameters
+ # process the body parameter
+
+
+ # set the HTTP header `Accept`
+ if 'Accept' not in _header_params:
+ _header_params['Accept'] = self.api_client.select_header_accept(
+ [
+ 'application/json'
+ ]
+ )
+
+
+ # authentication setting
+ _auth_settings: List[str] = [
+ 'sfsAuthentication'
+ ]
+
+ return self.api_client.param_serialize(
+ method='GET',
+ resource_path='/api/v1/customer/rooms/{streamId}/members',
+ path_params=_path_params,
+ query_params=_query_params,
+ header_params=_header_params,
+ body=_body_params,
+ post_params=_form_params,
+ files=_files,
+ auth_settings=_auth_settings,
+ collection_formats=_collection_formats,
+ _host=_host,
+ _request_auth=_request_auth
+ )
+
+
+
+
+ @validate_call
+ async def list_rooms(
+ self,
+ advisor_email_address: Annotated[StrictStr, Field(description="Advisor's email address")],
+ external_network: Annotated[StrictStr, Field(description="The external network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE")],
+ owner: Annotated[Optional[StrictBool], Field(description="If set to \"true\", list the rooms where the advisor is an owner. If set to \"false\", list the rooms where the advisor is only a member.")] = None,
+ before: Annotated[Optional[StrictStr], Field(description="The before cursor for pagination")] = None,
+ after: Annotated[Optional[StrictStr], Field(description="The after cursor for pagination")] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RoomsResponse:
+ """(Deprecated) List an advisor's rooms (deprecated)
+
+ List all rooms where an advisor is either a member or an owner for a given network.
The search is performed with the advisor's email address.
This end point returns at most 25 records per page.
+
+ :param advisor_email_address: Advisor's email address (required)
+ :type advisor_email_address: str
+ :param external_network: The external network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE (required)
+ :type external_network: str
+ :param owner: If set to \"true\", list the rooms where the advisor is an owner. If set to \"false\", list the rooms where the advisor is only a member.
+ :type owner: bool
+ :param before: The before cursor for pagination
+ :type before: str
+ :param after: The after cursor for pagination
+ :type after: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+ warnings.warn("GET /api/v1/customer/rooms is deprecated.", DeprecationWarning)
+
+ _param = self._list_rooms_serialize(
+ advisor_email_address=advisor_email_address,
+ external_network=external_network,
+ owner=owner,
+ before=before,
+ after=after,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "RoomsResponse",
+ '400': "InvalidPageCursor",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ ).data
+
+
+ @validate_call
+ async def list_rooms_with_http_info(
+ self,
+ advisor_email_address: Annotated[StrictStr, Field(description="Advisor's email address")],
+ external_network: Annotated[StrictStr, Field(description="The external network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE")],
+ owner: Annotated[Optional[StrictBool], Field(description="If set to \"true\", list the rooms where the advisor is an owner. If set to \"false\", list the rooms where the advisor is only a member.")] = None,
+ before: Annotated[Optional[StrictStr], Field(description="The before cursor for pagination")] = None,
+ after: Annotated[Optional[StrictStr], Field(description="The after cursor for pagination")] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> ApiResponse[RoomsResponse]:
+ """(Deprecated) List an advisor's rooms (deprecated)
+
+ List all rooms where an advisor is either a member or an owner for a given network.
The search is performed with the advisor's email address.
This end point returns at most 25 records per page.
+
+ :param advisor_email_address: Advisor's email address (required)
+ :type advisor_email_address: str
+ :param external_network: The external network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE (required)
+ :type external_network: str
+ :param owner: If set to \"true\", list the rooms where the advisor is an owner. If set to \"false\", list the rooms where the advisor is only a member.
+ :type owner: bool
+ :param before: The before cursor for pagination
+ :type before: str
+ :param after: The after cursor for pagination
+ :type after: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+ warnings.warn("GET /api/v1/customer/rooms is deprecated.", DeprecationWarning)
+
+ _param = self._list_rooms_serialize(
+ advisor_email_address=advisor_email_address,
+ external_network=external_network,
+ owner=owner,
+ before=before,
+ after=after,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "RoomsResponse",
+ '400': "InvalidPageCursor",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ )
+
+
+ @validate_call
+ async def list_rooms_without_preload_content(
+ self,
+ advisor_email_address: Annotated[StrictStr, Field(description="Advisor's email address")],
+ external_network: Annotated[StrictStr, Field(description="The external network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE")],
+ owner: Annotated[Optional[StrictBool], Field(description="If set to \"true\", list the rooms where the advisor is an owner. If set to \"false\", list the rooms where the advisor is only a member.")] = None,
+ before: Annotated[Optional[StrictStr], Field(description="The before cursor for pagination")] = None,
+ after: Annotated[Optional[StrictStr], Field(description="The after cursor for pagination")] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RESTResponseType:
+ """(Deprecated) List an advisor's rooms (deprecated)
+
+ List all rooms where an advisor is either a member or an owner for a given network.
The search is performed with the advisor's email address.
This end point returns at most 25 records per page.
+
+ :param advisor_email_address: Advisor's email address (required)
+ :type advisor_email_address: str
+ :param external_network: The external network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE (required)
+ :type external_network: str
+ :param owner: If set to \"true\", list the rooms where the advisor is an owner. If set to \"false\", list the rooms where the advisor is only a member.
+ :type owner: bool
+ :param before: The before cursor for pagination
+ :type before: str
+ :param after: The after cursor for pagination
+ :type after: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+ warnings.warn("GET /api/v1/customer/rooms is deprecated.", DeprecationWarning)
+
+ _param = self._list_rooms_serialize(
+ advisor_email_address=advisor_email_address,
+ external_network=external_network,
+ owner=owner,
+ before=before,
+ after=after,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "RoomsResponse",
+ '400': "InvalidPageCursor",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ return response_data.response
+
+
+ def _list_rooms_serialize(
+ self,
+ advisor_email_address,
+ external_network,
+ owner,
+ before,
+ after,
+ _request_auth,
+ _content_type,
+ _headers,
+ _host_index,
+ ) -> RequestSerialized:
+
+ _host = None
+
+ _collection_formats: Dict[str, str] = {
+ }
+
+ _path_params: Dict[str, str] = {}
+ _query_params: List[Tuple[str, str]] = []
+ _header_params: Dict[str, Optional[str]] = _headers or {}
+ _form_params: List[Tuple[str, str]] = []
+ _files: Dict[
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
+ ] = {}
+ _body_params: Optional[bytes] = None
+
+ # process the path parameters
+ # process the query parameters
+ if advisor_email_address is not None:
+
+ _query_params.append(('advisorEmailAddress', advisor_email_address))
+
+ if external_network is not None:
+
+ _query_params.append(('externalNetwork', external_network))
+
+ if owner is not None:
+
+ _query_params.append(('owner', owner))
+
+ if before is not None:
+
+ _query_params.append(('before', before))
+
+ if after is not None:
+
+ _query_params.append(('after', after))
+
+ # process the header parameters
+ # process the form parameters
+ # process the body parameter
+
+
+ # set the HTTP header `Accept`
+ if 'Accept' not in _header_params:
+ _header_params['Accept'] = self.api_client.select_header_accept(
+ [
+ 'application/json'
+ ]
+ )
+
+
+ # authentication setting
+ _auth_settings: List[str] = [
+ 'sfsAuthentication'
+ ]
+
+ return self.api_client.param_serialize(
+ method='GET',
+ resource_path='/api/v1/customer/rooms',
+ path_params=_path_params,
+ query_params=_query_params,
+ header_params=_header_params,
+ body=_body_params,
+ post_params=_form_params,
+ files=_files,
+ auth_settings=_auth_settings,
+ collection_formats=_collection_formats,
+ _host=_host,
+ _request_auth=_request_auth
+ )
+
+
+
+
+ @validate_call
+ async def list_roomsv2(
+ self,
+ advisor_symphony_id: Annotated[Decimal, Field(description="Advisor's Symphony user ID")],
+ external_network: Annotated[StrictStr, Field(description="The external network: WECHAT or WHATSAPP or WHATSAPP-DIRECT or SMS or SMS-DIRECT or LINE")],
+ owner: Annotated[Optional[StrictBool], Field(description="If set to \"true\", lists the rooms where the advisor is an owner. If set to \"false\", lists the rooms where the advisor is an owner and the rooms where the advisor is only a member.")] = None,
+ before: Annotated[Optional[StrictStr], Field(description="The before cursor for pagination")] = None,
+ after: Annotated[Optional[StrictStr], Field(description="The after cursor for pagination")] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RoomsResponse:
+ """List an advisor's rooms (recommended)
+
+ List all rooms where an advisor is either a member or an owner for a given network.
Search is performed with the advisor's Symphony user ID.
This end point returns at most 25 records per page.
+
+ :param advisor_symphony_id: Advisor's Symphony user ID (required)
+ :type advisor_symphony_id: decimal.Decimal
+ :param external_network: The external network: WECHAT or WHATSAPP or WHATSAPP-DIRECT or SMS or SMS-DIRECT or LINE (required)
+ :type external_network: str
+ :param owner: If set to \"true\", lists the rooms where the advisor is an owner. If set to \"false\", lists the rooms where the advisor is an owner and the rooms where the advisor is only a member.
+ :type owner: bool
+ :param before: The before cursor for pagination
+ :type before: str
+ :param after: The after cursor for pagination
+ :type after: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._list_roomsv2_serialize(
+ advisor_symphony_id=advisor_symphony_id,
+ external_network=external_network,
+ owner=owner,
+ before=before,
+ after=after,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "RoomsResponse",
+ '400': "InvalidPageCursor",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ '404': "ListRoomsv2404Response",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ ).data
+
+
+ @validate_call
+ async def list_roomsv2_with_http_info(
+ self,
+ advisor_symphony_id: Annotated[Decimal, Field(description="Advisor's Symphony user ID")],
+ external_network: Annotated[StrictStr, Field(description="The external network: WECHAT or WHATSAPP or WHATSAPP-DIRECT or SMS or SMS-DIRECT or LINE")],
+ owner: Annotated[Optional[StrictBool], Field(description="If set to \"true\", lists the rooms where the advisor is an owner. If set to \"false\", lists the rooms where the advisor is an owner and the rooms where the advisor is only a member.")] = None,
+ before: Annotated[Optional[StrictStr], Field(description="The before cursor for pagination")] = None,
+ after: Annotated[Optional[StrictStr], Field(description="The after cursor for pagination")] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> ApiResponse[RoomsResponse]:
+ """List an advisor's rooms (recommended)
+
+ List all rooms where an advisor is either a member or an owner for a given network.
Search is performed with the advisor's Symphony user ID.
This end point returns at most 25 records per page.
+
+ :param advisor_symphony_id: Advisor's Symphony user ID (required)
+ :type advisor_symphony_id: decimal.Decimal
+ :param external_network: The external network: WECHAT or WHATSAPP or WHATSAPP-DIRECT or SMS or SMS-DIRECT or LINE (required)
+ :type external_network: str
+ :param owner: If set to \"true\", lists the rooms where the advisor is an owner. If set to \"false\", lists the rooms where the advisor is an owner and the rooms where the advisor is only a member.
+ :type owner: bool
+ :param before: The before cursor for pagination
+ :type before: str
+ :param after: The after cursor for pagination
+ :type after: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._list_roomsv2_serialize(
+ advisor_symphony_id=advisor_symphony_id,
+ external_network=external_network,
+ owner=owner,
+ before=before,
+ after=after,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "RoomsResponse",
+ '400': "InvalidPageCursor",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ '404': "ListRoomsv2404Response",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ )
+
+
+ @validate_call
+ async def list_roomsv2_without_preload_content(
+ self,
+ advisor_symphony_id: Annotated[Decimal, Field(description="Advisor's Symphony user ID")],
+ external_network: Annotated[StrictStr, Field(description="The external network: WECHAT or WHATSAPP or WHATSAPP-DIRECT or SMS or SMS-DIRECT or LINE")],
+ owner: Annotated[Optional[StrictBool], Field(description="If set to \"true\", lists the rooms where the advisor is an owner. If set to \"false\", lists the rooms where the advisor is an owner and the rooms where the advisor is only a member.")] = None,
+ before: Annotated[Optional[StrictStr], Field(description="The before cursor for pagination")] = None,
+ after: Annotated[Optional[StrictStr], Field(description="The after cursor for pagination")] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RESTResponseType:
+ """List an advisor's rooms (recommended)
+
+ List all rooms where an advisor is either a member or an owner for a given network.
Search is performed with the advisor's Symphony user ID.
This end point returns at most 25 records per page.
+
+ :param advisor_symphony_id: Advisor's Symphony user ID (required)
+ :type advisor_symphony_id: decimal.Decimal
+ :param external_network: The external network: WECHAT or WHATSAPP or WHATSAPP-DIRECT or SMS or SMS-DIRECT or LINE (required)
+ :type external_network: str
+ :param owner: If set to \"true\", lists the rooms where the advisor is an owner. If set to \"false\", lists the rooms where the advisor is an owner and the rooms where the advisor is only a member.
+ :type owner: bool
+ :param before: The before cursor for pagination
+ :type before: str
+ :param after: The after cursor for pagination
+ :type after: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._list_roomsv2_serialize(
+ advisor_symphony_id=advisor_symphony_id,
+ external_network=external_network,
+ owner=owner,
+ before=before,
+ after=after,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "RoomsResponse",
+ '400': "InvalidPageCursor",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ '404': "ListRoomsv2404Response",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ return response_data.response
+
+
+ def _list_roomsv2_serialize(
+ self,
+ advisor_symphony_id,
+ external_network,
+ owner,
+ before,
+ after,
+ _request_auth,
+ _content_type,
+ _headers,
+ _host_index,
+ ) -> RequestSerialized:
+
+ _host = None
+
+ _collection_formats: Dict[str, str] = {
+ }
+
+ _path_params: Dict[str, str] = {}
+ _query_params: List[Tuple[str, str]] = []
+ _header_params: Dict[str, Optional[str]] = _headers or {}
+ _form_params: List[Tuple[str, str]] = []
+ _files: Dict[
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
+ ] = {}
+ _body_params: Optional[bytes] = None
+
+ # process the path parameters
+ # process the query parameters
+ if advisor_symphony_id is not None:
+
+ _query_params.append(('advisorSymphonyId', advisor_symphony_id))
+
+ if external_network is not None:
+
+ _query_params.append(('externalNetwork', external_network))
+
+ if owner is not None:
+
+ _query_params.append(('owner', owner))
+
+ if before is not None:
+
+ _query_params.append(('before', before))
+
+ if after is not None:
+
+ _query_params.append(('after', after))
+
+ # process the header parameters
+ # process the form parameters
+ # process the body parameter
+
+
+ # set the HTTP header `Accept`
+ if 'Accept' not in _header_params:
+ _header_params['Accept'] = self.api_client.select_header_accept(
+ [
+ 'application/json'
+ ]
+ )
+
+
+ # authentication setting
+ _auth_settings: List[str] = [
+ 'sfsAuthentication'
+ ]
+
+ return self.api_client.param_serialize(
+ method='GET',
+ resource_path='/api/v2/customer/rooms',
+ path_params=_path_params,
+ query_params=_query_params,
+ header_params=_header_params,
+ body=_body_params,
+ post_params=_form_params,
+ files=_files,
+ auth_settings=_auth_settings,
+ collection_formats=_collection_formats,
+ _host=_host,
+ _request_auth=_request_auth
+ )
+
+
+
+
+ @validate_call
+ async def remove_room_member(
+ self,
+ stream_id: Annotated[StrictStr, Field(description="Room's streamId. The streamId needs to be URL safe Base64. To obtain the URLSafe Base64 conversation ID: - Replace forward slashes / with underscores _ - Replace pluses + with minuses - - Ignore any trailing equal signs = For example, the URLSafe Base64 encoding of: lX1hwfmQ+AK/k/a/BB0y2n///q2+0KfbdA== converts to lX1hwfmQ-AK_k_a_BB0y2n___q2-0KfbdA. ")],
+ member_email_address: Annotated[StrictStr, Field(description="The email address of the member to remove")],
+ external_network: Annotated[StrictStr, Field(description="The external network of the member to remove: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE")],
+ advisor_email_address: Annotated[StrictStr, Field(description="The email address of the advisor who is removing the member")],
+ contact: Annotated[StrictBool, Field(description="If set to \"true\", the member to remove is a contact.
If set to \"false\", the member to remove is an advisor.
")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RemoveRoomMembersResponse:
+ """(Deprecated) Remove room member (deprecated)
+
+ Remove a member from a room, be it an advisor or a contact.
The room is identified by its streamId.
+
+ :param stream_id: Room's streamId. The streamId needs to be URL safe Base64. To obtain the URLSafe Base64 conversation ID: - Replace forward slashes / with underscores _ - Replace pluses + with minuses - - Ignore any trailing equal signs = For example, the URLSafe Base64 encoding of: lX1hwfmQ+AK/k/a/BB0y2n///q2+0KfbdA== converts to lX1hwfmQ-AK_k_a_BB0y2n___q2-0KfbdA. (required)
+ :type stream_id: str
+ :param member_email_address: The email address of the member to remove (required)
+ :type member_email_address: str
+ :param external_network: The external network of the member to remove: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE (required)
+ :type external_network: str
+ :param advisor_email_address: The email address of the advisor who is removing the member (required)
+ :type advisor_email_address: str
+ :param contact: If set to \"true\", the member to remove is a contact.
If set to \"false\", the member to remove is an advisor.
(required)
+ :type contact: bool
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+ warnings.warn("DELETE /api/v1/customer/rooms/{streamId}/members is deprecated.", DeprecationWarning)
+
+ _param = self._remove_room_member_serialize(
+ stream_id=stream_id,
+ member_email_address=member_email_address,
+ external_network=external_network,
+ advisor_email_address=advisor_email_address,
+ contact=contact,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "RemoveRoomMembersResponse",
+ '403': "RemoveRoomMemberv2403Response",
+ '401': "Unauthorized",
+ '404': "InlineResponse4048",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ ).data
+
+
+ @validate_call
+ async def remove_room_member_with_http_info(
+ self,
+ stream_id: Annotated[StrictStr, Field(description="Room's streamId. The streamId needs to be URL safe Base64. To obtain the URLSafe Base64 conversation ID: - Replace forward slashes / with underscores _ - Replace pluses + with minuses - - Ignore any trailing equal signs = For example, the URLSafe Base64 encoding of: lX1hwfmQ+AK/k/a/BB0y2n///q2+0KfbdA== converts to lX1hwfmQ-AK_k_a_BB0y2n___q2-0KfbdA. ")],
+ member_email_address: Annotated[StrictStr, Field(description="The email address of the member to remove")],
+ external_network: Annotated[StrictStr, Field(description="The external network of the member to remove: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE")],
+ advisor_email_address: Annotated[StrictStr, Field(description="The email address of the advisor who is removing the member")],
+ contact: Annotated[StrictBool, Field(description="If set to \"true\", the member to remove is a contact.
If set to \"false\", the member to remove is an advisor.
")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> ApiResponse[RemoveRoomMembersResponse]:
+ """(Deprecated) Remove room member (deprecated)
+
+ Remove a member from a room, be it an advisor or a contact.
The room is identified by its streamId.
+
+ :param stream_id: Room's streamId. The streamId needs to be URL safe Base64. To obtain the URLSafe Base64 conversation ID: - Replace forward slashes / with underscores _ - Replace pluses + with minuses - - Ignore any trailing equal signs = For example, the URLSafe Base64 encoding of: lX1hwfmQ+AK/k/a/BB0y2n///q2+0KfbdA== converts to lX1hwfmQ-AK_k_a_BB0y2n___q2-0KfbdA. (required)
+ :type stream_id: str
+ :param member_email_address: The email address of the member to remove (required)
+ :type member_email_address: str
+ :param external_network: The external network of the member to remove: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE (required)
+ :type external_network: str
+ :param advisor_email_address: The email address of the advisor who is removing the member (required)
+ :type advisor_email_address: str
+ :param contact: If set to \"true\", the member to remove is a contact.
If set to \"false\", the member to remove is an advisor.
(required)
+ :type contact: bool
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+ warnings.warn("DELETE /api/v1/customer/rooms/{streamId}/members is deprecated.", DeprecationWarning)
+
+ _param = self._remove_room_member_serialize(
+ stream_id=stream_id,
+ member_email_address=member_email_address,
+ external_network=external_network,
+ advisor_email_address=advisor_email_address,
+ contact=contact,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "RemoveRoomMembersResponse",
+ '403': "RemoveRoomMemberv2403Response",
+ '401': "Unauthorized",
+ '404': "InlineResponse4048",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ )
+
+
+ @validate_call
+ async def remove_room_member_without_preload_content(
+ self,
+ stream_id: Annotated[StrictStr, Field(description="Room's streamId. The streamId needs to be URL safe Base64. To obtain the URLSafe Base64 conversation ID: - Replace forward slashes / with underscores _ - Replace pluses + with minuses - - Ignore any trailing equal signs = For example, the URLSafe Base64 encoding of: lX1hwfmQ+AK/k/a/BB0y2n///q2+0KfbdA== converts to lX1hwfmQ-AK_k_a_BB0y2n___q2-0KfbdA. ")],
+ member_email_address: Annotated[StrictStr, Field(description="The email address of the member to remove")],
+ external_network: Annotated[StrictStr, Field(description="The external network of the member to remove: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE")],
+ advisor_email_address: Annotated[StrictStr, Field(description="The email address of the advisor who is removing the member")],
+ contact: Annotated[StrictBool, Field(description="If set to \"true\", the member to remove is a contact.
If set to \"false\", the member to remove is an advisor.
")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RESTResponseType:
+ """(Deprecated) Remove room member (deprecated)
+
+ Remove a member from a room, be it an advisor or a contact.
The room is identified by its streamId.
+
+ :param stream_id: Room's streamId. The streamId needs to be URL safe Base64. To obtain the URLSafe Base64 conversation ID: - Replace forward slashes / with underscores _ - Replace pluses + with minuses - - Ignore any trailing equal signs = For example, the URLSafe Base64 encoding of: lX1hwfmQ+AK/k/a/BB0y2n///q2+0KfbdA== converts to lX1hwfmQ-AK_k_a_BB0y2n___q2-0KfbdA. (required)
+ :type stream_id: str
+ :param member_email_address: The email address of the member to remove (required)
+ :type member_email_address: str
+ :param external_network: The external network of the member to remove: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE (required)
+ :type external_network: str
+ :param advisor_email_address: The email address of the advisor who is removing the member (required)
+ :type advisor_email_address: str
+ :param contact: If set to \"true\", the member to remove is a contact.
If set to \"false\", the member to remove is an advisor.
(required)
+ :type contact: bool
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+ warnings.warn("DELETE /api/v1/customer/rooms/{streamId}/members is deprecated.", DeprecationWarning)
+
+ _param = self._remove_room_member_serialize(
+ stream_id=stream_id,
+ member_email_address=member_email_address,
+ external_network=external_network,
+ advisor_email_address=advisor_email_address,
+ contact=contact,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "RemoveRoomMembersResponse",
+ '403': "RemoveRoomMemberv2403Response",
+ '401': "Unauthorized",
+ '404': "InlineResponse4048",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ return response_data.response
+
+
+ def _remove_room_member_serialize(
+ self,
+ stream_id,
+ member_email_address,
+ external_network,
+ advisor_email_address,
+ contact,
+ _request_auth,
+ _content_type,
+ _headers,
+ _host_index,
+ ) -> RequestSerialized:
+
+ _host = None
+
+ _collection_formats: Dict[str, str] = {
+ }
+
+ _path_params: Dict[str, str] = {}
+ _query_params: List[Tuple[str, str]] = []
+ _header_params: Dict[str, Optional[str]] = _headers or {}
+ _form_params: List[Tuple[str, str]] = []
+ _files: Dict[
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
+ ] = {}
+ _body_params: Optional[bytes] = None
+
+ # process the path parameters
+ if stream_id is not None:
+ _path_params['streamId'] = stream_id
+ # process the query parameters
+ if member_email_address is not None:
+
+ _query_params.append(('memberEmailAddress', member_email_address))
+
+ if external_network is not None:
+
+ _query_params.append(('externalNetwork', external_network))
+
+ if advisor_email_address is not None:
+
+ _query_params.append(('advisorEmailAddress', advisor_email_address))
+
+ if contact is not None:
+
+ _query_params.append(('contact', contact))
+
+ # process the header parameters
+ # process the form parameters
+ # process the body parameter
+
+
+ # set the HTTP header `Accept`
+ if 'Accept' not in _header_params:
+ _header_params['Accept'] = self.api_client.select_header_accept(
+ [
+ 'application/json'
+ ]
+ )
+
+
+ # authentication setting
+ _auth_settings: List[str] = [
+ 'sfsAuthentication'
+ ]
+
+ return self.api_client.param_serialize(
+ method='DELETE',
+ resource_path='/api/v1/customer/rooms/{streamId}/members',
+ path_params=_path_params,
+ query_params=_query_params,
+ header_params=_header_params,
+ body=_body_params,
+ post_params=_form_params,
+ files=_files,
+ auth_settings=_auth_settings,
+ collection_formats=_collection_formats,
+ _host=_host,
+ _request_auth=_request_auth
+ )
+
+
+
+
+ @validate_call
+ async def remove_room_memberv2(
+ self,
+ stream_id: Annotated[StrictStr, Field(description="Room's streamId. The streamId needs to be URLsafe Base64. To obtain the URLSafe Base64 Conversation ID: - replace forward slashes / with underscores - replace pluses + with minuses - - ignore any trailing equal signs = For example, the URLSafe Base64 encoding of: lX1hwfmQ+AK/k/a/BB0y2n///q2+0KfbdA== converts to lX1hwfmQ-AK_k_a_BB0y2n___q2-0KfbdA. ")],
+ member_symphony_id: Annotated[Decimal, Field(description="The Symphony user ID of the member to remove")],
+ advisor_symphony_id: Annotated[Union[StrictFloat, StrictInt], Field(description="The Symphony user ID of the advisor who is removing the member")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RemoveRoomMembersResponse:
+ """Remove room member (recommended)
+
+ Remove any member, advisor or contact from a room.
The room is identified by its streamID.
+
+ :param stream_id: Room's streamId. The streamId needs to be URLsafe Base64. To obtain the URLSafe Base64 Conversation ID: - replace forward slashes / with underscores - replace pluses + with minuses - - ignore any trailing equal signs = For example, the URLSafe Base64 encoding of: lX1hwfmQ+AK/k/a/BB0y2n///q2+0KfbdA== converts to lX1hwfmQ-AK_k_a_BB0y2n___q2-0KfbdA. (required)
+ :type stream_id: str
+ :param member_symphony_id: The Symphony user ID of the member to remove (required)
+ :type member_symphony_id: decimal.Decimal
+ :param advisor_symphony_id: The Symphony user ID of the advisor who is removing the member (required)
+ :type advisor_symphony_id: float
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._remove_room_memberv2_serialize(
+ stream_id=stream_id,
+ member_symphony_id=member_symphony_id,
+ advisor_symphony_id=advisor_symphony_id,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "RemoveRoomMembersResponse",
+ '403': "RemoveRoomMemberv2403Response",
+ '401': "Unauthorized",
+ '404': "InlineResponse4048",
+ '409': "UserAlreadyOnboarded",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ ).data
+
+
+ @validate_call
+ async def remove_room_memberv2_with_http_info(
+ self,
+ stream_id: Annotated[StrictStr, Field(description="Room's streamId. The streamId needs to be URLsafe Base64. To obtain the URLSafe Base64 Conversation ID: - replace forward slashes / with underscores - replace pluses + with minuses - - ignore any trailing equal signs = For example, the URLSafe Base64 encoding of: lX1hwfmQ+AK/k/a/BB0y2n///q2+0KfbdA== converts to lX1hwfmQ-AK_k_a_BB0y2n___q2-0KfbdA. ")],
+ member_symphony_id: Annotated[Decimal, Field(description="The Symphony user ID of the member to remove")],
+ advisor_symphony_id: Annotated[Union[StrictFloat, StrictInt], Field(description="The Symphony user ID of the advisor who is removing the member")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> ApiResponse[RemoveRoomMembersResponse]:
+ """Remove room member (recommended)
+
+ Remove any member, advisor or contact from a room.
The room is identified by its streamID.
+
+ :param stream_id: Room's streamId. The streamId needs to be URLsafe Base64. To obtain the URLSafe Base64 Conversation ID: - replace forward slashes / with underscores - replace pluses + with minuses - - ignore any trailing equal signs = For example, the URLSafe Base64 encoding of: lX1hwfmQ+AK/k/a/BB0y2n///q2+0KfbdA== converts to lX1hwfmQ-AK_k_a_BB0y2n___q2-0KfbdA. (required)
+ :type stream_id: str
+ :param member_symphony_id: The Symphony user ID of the member to remove (required)
+ :type member_symphony_id: decimal.Decimal
+ :param advisor_symphony_id: The Symphony user ID of the advisor who is removing the member (required)
+ :type advisor_symphony_id: float
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._remove_room_memberv2_serialize(
+ stream_id=stream_id,
+ member_symphony_id=member_symphony_id,
+ advisor_symphony_id=advisor_symphony_id,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "RemoveRoomMembersResponse",
+ '403': "RemoveRoomMemberv2403Response",
+ '401': "Unauthorized",
+ '404': "InlineResponse4048",
+ '409': "UserAlreadyOnboarded",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ )
+
+
+ @validate_call
+ async def remove_room_memberv2_without_preload_content(
+ self,
+ stream_id: Annotated[StrictStr, Field(description="Room's streamId. The streamId needs to be URLsafe Base64. To obtain the URLSafe Base64 Conversation ID: - replace forward slashes / with underscores - replace pluses + with minuses - - ignore any trailing equal signs = For example, the URLSafe Base64 encoding of: lX1hwfmQ+AK/k/a/BB0y2n///q2+0KfbdA== converts to lX1hwfmQ-AK_k_a_BB0y2n___q2-0KfbdA. ")],
+ member_symphony_id: Annotated[Decimal, Field(description="The Symphony user ID of the member to remove")],
+ advisor_symphony_id: Annotated[Union[StrictFloat, StrictInt], Field(description="The Symphony user ID of the advisor who is removing the member")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RESTResponseType:
+ """Remove room member (recommended)
+
+ Remove any member, advisor or contact from a room.
The room is identified by its streamID.
+
+ :param stream_id: Room's streamId. The streamId needs to be URLsafe Base64. To obtain the URLSafe Base64 Conversation ID: - replace forward slashes / with underscores - replace pluses + with minuses - - ignore any trailing equal signs = For example, the URLSafe Base64 encoding of: lX1hwfmQ+AK/k/a/BB0y2n///q2+0KfbdA== converts to lX1hwfmQ-AK_k_a_BB0y2n___q2-0KfbdA. (required)
+ :type stream_id: str
+ :param member_symphony_id: The Symphony user ID of the member to remove (required)
+ :type member_symphony_id: decimal.Decimal
+ :param advisor_symphony_id: The Symphony user ID of the advisor who is removing the member (required)
+ :type advisor_symphony_id: float
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._remove_room_memberv2_serialize(
+ stream_id=stream_id,
+ member_symphony_id=member_symphony_id,
+ advisor_symphony_id=advisor_symphony_id,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "RemoveRoomMembersResponse",
+ '403': "RemoveRoomMemberv2403Response",
+ '401': "Unauthorized",
+ '404': "InlineResponse4048",
+ '409': "UserAlreadyOnboarded",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ return response_data.response
+
+
+ def _remove_room_memberv2_serialize(
+ self,
+ stream_id,
+ member_symphony_id,
+ advisor_symphony_id,
+ _request_auth,
+ _content_type,
+ _headers,
+ _host_index,
+ ) -> RequestSerialized:
+
+ _host = None
+
+ _collection_formats: Dict[str, str] = {
+ }
+
+ _path_params: Dict[str, str] = {}
+ _query_params: List[Tuple[str, str]] = []
+ _header_params: Dict[str, Optional[str]] = _headers or {}
+ _form_params: List[Tuple[str, str]] = []
+ _files: Dict[
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
+ ] = {}
+ _body_params: Optional[bytes] = None
+
+ # process the path parameters
+ if stream_id is not None:
+ _path_params['streamId'] = stream_id
+ # process the query parameters
+ if member_symphony_id is not None:
+
+ _query_params.append(('memberSymphonyId', member_symphony_id))
+
+ if advisor_symphony_id is not None:
+
+ _query_params.append(('advisorSymphonyId', advisor_symphony_id))
+
+ # process the header parameters
+ # process the form parameters
+ # process the body parameter
+
+
+ # set the HTTP header `Accept`
+ if 'Accept' not in _header_params:
+ _header_params['Accept'] = self.api_client.select_header_accept(
+ [
+ 'application/json'
+ ]
+ )
+
+
+ # authentication setting
+ _auth_settings: List[str] = [
+ 'sfsAuthentication'
+ ]
+
+ return self.api_client.param_serialize(
+ method='DELETE',
+ resource_path='/api/v2/customer/rooms/{streamId}/members',
+ path_params=_path_params,
+ query_params=_query_params,
+ header_params=_header_params,
+ body=_body_params,
+ post_params=_form_params,
+ files=_files,
+ auth_settings=_auth_settings,
+ collection_formats=_collection_formats,
+ _host=_host,
+ _request_auth=_request_auth
+ )
+
+
+
+
+ @validate_call
+ async def rename_room(
+ self,
+ stream_id: Annotated[StrictStr, Field(description="StreamId of the room to rename.")],
+ rename_room_request: Optional[RenameRoomRequest] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RenameRoomResponse:
+ """Rename a room
+
+ Rename a room with the new room name which is provided.
+
+ :param stream_id: StreamId of the room to rename. (required)
+ :type stream_id: str
+ :param rename_room_request:
+ :type rename_room_request: RenameRoomRequest
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._rename_room_serialize(
+ stream_id=stream_id,
+ rename_room_request=rename_room_request,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "RenameRoomResponse",
+ '401': "Unauthorized",
+ '403': "RenameRoomForbidden",
+ '404': "RoomNotFound",
+ '409': "RenameRoom409Response",
+ '500': "RenameRoomFailed",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ ).data
+
+
+ @validate_call
+ async def rename_room_with_http_info(
+ self,
+ stream_id: Annotated[StrictStr, Field(description="StreamId of the room to rename.")],
+ rename_room_request: Optional[RenameRoomRequest] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> ApiResponse[RenameRoomResponse]:
+ """Rename a room
+
+ Rename a room with the new room name which is provided.
+
+ :param stream_id: StreamId of the room to rename. (required)
+ :type stream_id: str
+ :param rename_room_request:
+ :type rename_room_request: RenameRoomRequest
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._rename_room_serialize(
+ stream_id=stream_id,
+ rename_room_request=rename_room_request,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "RenameRoomResponse",
+ '401': "Unauthorized",
+ '403': "RenameRoomForbidden",
+ '404': "RoomNotFound",
+ '409': "RenameRoom409Response",
+ '500': "RenameRoomFailed",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ )
+
+
+ @validate_call
+ async def rename_room_without_preload_content(
+ self,
+ stream_id: Annotated[StrictStr, Field(description="StreamId of the room to rename.")],
+ rename_room_request: Optional[RenameRoomRequest] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RESTResponseType:
+ """Rename a room
+
+ Rename a room with the new room name which is provided.
+
+ :param stream_id: StreamId of the room to rename. (required)
+ :type stream_id: str
+ :param rename_room_request:
+ :type rename_room_request: RenameRoomRequest
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._rename_room_serialize(
+ stream_id=stream_id,
+ rename_room_request=rename_room_request,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "RenameRoomResponse",
+ '401': "Unauthorized",
+ '403': "RenameRoomForbidden",
+ '404': "RoomNotFound",
+ '409': "RenameRoom409Response",
+ '500': "RenameRoomFailed",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ return response_data.response
+
+
+ def _rename_room_serialize(
+ self,
+ stream_id,
+ rename_room_request,
+ _request_auth,
+ _content_type,
+ _headers,
+ _host_index,
+ ) -> RequestSerialized:
+
+ _host = None
+
+ _collection_formats: Dict[str, str] = {
+ }
+
+ _path_params: Dict[str, str] = {}
+ _query_params: List[Tuple[str, str]] = []
+ _header_params: Dict[str, Optional[str]] = _headers or {}
+ _form_params: List[Tuple[str, str]] = []
+ _files: Dict[
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
+ ] = {}
+ _body_params: Optional[bytes] = None
+
+ # process the path parameters
+ if stream_id is not None:
+ _path_params['streamId'] = stream_id
+ # process the query parameters
+ # process the header parameters
+ # process the form parameters
+ # process the body parameter
+ if rename_room_request is not None:
+ _body_params = rename_room_request
+
+
+ # set the HTTP header `Accept`
+ if 'Accept' not in _header_params:
+ _header_params['Accept'] = self.api_client.select_header_accept(
+ [
+ 'application/json'
+ ]
+ )
+
+ # set the HTTP header `Content-Type`
+ if _content_type:
+ _header_params['Content-Type'] = _content_type
+ else:
+ _default_content_type = (
+ self.api_client.select_header_content_type(
+ [
+ 'application/json'
+ ]
+ )
+ )
+ if _default_content_type is not None:
+ _header_params['Content-Type'] = _default_content_type
+
+ # authentication setting
+ _auth_settings: List[str] = [
+ 'sfsAuthentication'
+ ]
+
+ return self.api_client.param_serialize(
+ method='POST',
+ resource_path='/api/v1/customer/rooms/{streamId}/rename',
+ path_params=_path_params,
+ query_params=_query_params,
+ header_params=_header_params,
+ body=_body_params,
+ post_params=_form_params,
+ files=_files,
+ auth_settings=_auth_settings,
+ collection_formats=_collection_formats,
+ _host=_host,
+ _request_auth=_request_auth
+ )
+
+
+
+
+ @validate_call
+ async def transfer_room_ownership(
+ self,
+ stream_id: Annotated[StrictStr, Field(description="StreamId of the room to transfer.")],
+ transfer_room_ownership_request: Optional[TransferRoomOwnershipRequest] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> None:
+ """Transfer room ownership to another advisor
+
+ Transfer the room ownership to the advisor matching the provided Symphony user ID.
This advisor should already be a member of the room.
+
+ :param stream_id: StreamId of the room to transfer. (required)
+ :type stream_id: str
+ :param transfer_room_ownership_request:
+ :type transfer_room_ownership_request: TransferRoomOwnershipRequest
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._transfer_room_ownership_serialize(
+ stream_id=stream_id,
+ transfer_room_ownership_request=transfer_room_ownership_request,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '204': None,
+ '404': "TransferRoomOwnership404Response",
+ '409': "TransferRoomOwnership409Response",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ ).data
+
+
+ @validate_call
+ async def transfer_room_ownership_with_http_info(
+ self,
+ stream_id: Annotated[StrictStr, Field(description="StreamId of the room to transfer.")],
+ transfer_room_ownership_request: Optional[TransferRoomOwnershipRequest] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> ApiResponse[None]:
+ """Transfer room ownership to another advisor
+
+ Transfer the room ownership to the advisor matching the provided Symphony user ID.
This advisor should already be a member of the room.
+
+ :param stream_id: StreamId of the room to transfer. (required)
+ :type stream_id: str
+ :param transfer_room_ownership_request:
+ :type transfer_room_ownership_request: TransferRoomOwnershipRequest
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._transfer_room_ownership_serialize(
+ stream_id=stream_id,
+ transfer_room_ownership_request=transfer_room_ownership_request,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '204': None,
+ '404': "TransferRoomOwnership404Response",
+ '409': "TransferRoomOwnership409Response",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ )
+
+
+ @validate_call
+ async def transfer_room_ownership_without_preload_content(
+ self,
+ stream_id: Annotated[StrictStr, Field(description="StreamId of the room to transfer.")],
+ transfer_room_ownership_request: Optional[TransferRoomOwnershipRequest] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RESTResponseType:
+ """Transfer room ownership to another advisor
+
+ Transfer the room ownership to the advisor matching the provided Symphony user ID.
This advisor should already be a member of the room.
+
+ :param stream_id: StreamId of the room to transfer. (required)
+ :type stream_id: str
+ :param transfer_room_ownership_request:
+ :type transfer_room_ownership_request: TransferRoomOwnershipRequest
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._transfer_room_ownership_serialize(
+ stream_id=stream_id,
+ transfer_room_ownership_request=transfer_room_ownership_request,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '204': None,
+ '404': "TransferRoomOwnership404Response",
+ '409': "TransferRoomOwnership409Response",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ return response_data.response
+
+
+ def _transfer_room_ownership_serialize(
+ self,
+ stream_id,
+ transfer_room_ownership_request,
+ _request_auth,
+ _content_type,
+ _headers,
+ _host_index,
+ ) -> RequestSerialized:
+
+ _host = None
+
+ _collection_formats: Dict[str, str] = {
+ }
+
+ _path_params: Dict[str, str] = {}
+ _query_params: List[Tuple[str, str]] = []
+ _header_params: Dict[str, Optional[str]] = _headers or {}
+ _form_params: List[Tuple[str, str]] = []
+ _files: Dict[
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
+ ] = {}
+ _body_params: Optional[bytes] = None
+
+ # process the path parameters
+ if stream_id is not None:
+ _path_params['streamId'] = stream_id
+ # process the query parameters
+ # process the header parameters
+ # process the form parameters
+ # process the body parameter
+ if transfer_room_ownership_request is not None:
+ _body_params = transfer_room_ownership_request
+
+
+ # set the HTTP header `Accept`
+ if 'Accept' not in _header_params:
+ _header_params['Accept'] = self.api_client.select_header_accept(
+ [
+ 'application/json'
+ ]
+ )
+
+ # set the HTTP header `Content-Type`
+ if _content_type:
+ _header_params['Content-Type'] = _content_type
+ else:
+ _default_content_type = (
+ self.api_client.select_header_content_type(
+ [
+ 'application/json'
+ ]
+ )
+ )
+ if _default_content_type is not None:
+ _header_params['Content-Type'] = _default_content_type
+
+ # authentication setting
+ _auth_settings: List[str] = [
+ 'sfsAuthentication'
+ ]
+
+ return self.api_client.param_serialize(
+ method='POST',
+ resource_path='/api/v1/customer/rooms/{streamId}/ownership',
+ path_params=_path_params,
+ query_params=_query_params,
+ header_params=_header_params,
+ body=_body_params,
+ post_params=_form_params,
+ files=_files,
+ auth_settings=_auth_settings,
+ collection_formats=_collection_formats,
+ _host=_host,
+ _request_auth=_request_auth
+ )
+
+
+
+
+ @validate_call
+ async def update_room_features(
+ self,
+ stream_id: Annotated[StrictStr, Field(description="Room's streamId. The streamId needs to be URLsafe Base64. To obtain the URLSafe Base64 conversation ID: - Replace forward slashes / with underscores _ - Replace pluses + with minuses - - Ignore any trailing equal signs = For example, the URLSafe Base64 encoding of: lX1hwfmQ+AK/k/a/BB0y2n///q2+0KfbdA== converts to lX1hwfmQ-AK_k_a_BB0y2n___q2-0KfbdA. ")],
+ room_features_request: Optional[RoomFeaturesRequest] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> None:
+ """Update a room's features
+
+ Update a room's features. Only supported for WhatsApp. The room is identified by its streamID.
+
+ :param stream_id: Room's streamId. The streamId needs to be URLsafe Base64. To obtain the URLSafe Base64 conversation ID: - Replace forward slashes / with underscores _ - Replace pluses + with minuses - - Ignore any trailing equal signs = For example, the URLSafe Base64 encoding of: lX1hwfmQ+AK/k/a/BB0y2n///q2+0KfbdA== converts to lX1hwfmQ-AK_k_a_BB0y2n___q2-0KfbdA. (required)
+ :type stream_id: str
+ :param room_features_request:
+ :type room_features_request: RoomFeaturesRequest
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._update_room_features_serialize(
+ stream_id=stream_id,
+ room_features_request=room_features_request,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '204': None,
+ '400': "InvalidPageCursor",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ ).data
+
+
+ @validate_call
+ async def update_room_features_with_http_info(
+ self,
+ stream_id: Annotated[StrictStr, Field(description="Room's streamId. The streamId needs to be URLsafe Base64. To obtain the URLSafe Base64 conversation ID: - Replace forward slashes / with underscores _ - Replace pluses + with minuses - - Ignore any trailing equal signs = For example, the URLSafe Base64 encoding of: lX1hwfmQ+AK/k/a/BB0y2n///q2+0KfbdA== converts to lX1hwfmQ-AK_k_a_BB0y2n___q2-0KfbdA. ")],
+ room_features_request: Optional[RoomFeaturesRequest] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> ApiResponse[None]:
+ """Update a room's features
+
+ Update a room's features. Only supported for WhatsApp. The room is identified by its streamID.
+
+ :param stream_id: Room's streamId. The streamId needs to be URLsafe Base64. To obtain the URLSafe Base64 conversation ID: - Replace forward slashes / with underscores _ - Replace pluses + with minuses - - Ignore any trailing equal signs = For example, the URLSafe Base64 encoding of: lX1hwfmQ+AK/k/a/BB0y2n///q2+0KfbdA== converts to lX1hwfmQ-AK_k_a_BB0y2n___q2-0KfbdA. (required)
+ :type stream_id: str
+ :param room_features_request:
+ :type room_features_request: RoomFeaturesRequest
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._update_room_features_serialize(
+ stream_id=stream_id,
+ room_features_request=room_features_request,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '204': None,
+ '400': "InvalidPageCursor",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ )
+
+
+ @validate_call
+ async def update_room_features_without_preload_content(
+ self,
+ stream_id: Annotated[StrictStr, Field(description="Room's streamId. The streamId needs to be URLsafe Base64. To obtain the URLSafe Base64 conversation ID: - Replace forward slashes / with underscores _ - Replace pluses + with minuses - - Ignore any trailing equal signs = For example, the URLSafe Base64 encoding of: lX1hwfmQ+AK/k/a/BB0y2n///q2+0KfbdA== converts to lX1hwfmQ-AK_k_a_BB0y2n___q2-0KfbdA. ")],
+ room_features_request: Optional[RoomFeaturesRequest] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RESTResponseType:
+ """Update a room's features
+
+ Update a room's features. Only supported for WhatsApp. The room is identified by its streamID.
+
+ :param stream_id: Room's streamId. The streamId needs to be URLsafe Base64. To obtain the URLSafe Base64 conversation ID: - Replace forward slashes / with underscores _ - Replace pluses + with minuses - - Ignore any trailing equal signs = For example, the URLSafe Base64 encoding of: lX1hwfmQ+AK/k/a/BB0y2n///q2+0KfbdA== converts to lX1hwfmQ-AK_k_a_BB0y2n___q2-0KfbdA. (required)
+ :type stream_id: str
+ :param room_features_request:
+ :type room_features_request: RoomFeaturesRequest
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._update_room_features_serialize(
+ stream_id=stream_id,
+ room_features_request=room_features_request,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '204': None,
+ '400': "InvalidPageCursor",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ return response_data.response
+
+
+ def _update_room_features_serialize(
+ self,
+ stream_id,
+ room_features_request,
+ _request_auth,
+ _content_type,
+ _headers,
+ _host_index,
+ ) -> RequestSerialized:
+
+ _host = None
+
+ _collection_formats: Dict[str, str] = {
+ }
+
+ _path_params: Dict[str, str] = {}
+ _query_params: List[Tuple[str, str]] = []
+ _header_params: Dict[str, Optional[str]] = _headers or {}
+ _form_params: List[Tuple[str, str]] = []
+ _files: Dict[
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
+ ] = {}
+ _body_params: Optional[bytes] = None
+
+ # process the path parameters
+ if stream_id is not None:
+ _path_params['streamId'] = stream_id
+ # process the query parameters
+ # process the header parameters
+ # process the form parameters
+ # process the body parameter
+ if room_features_request is not None:
+ _body_params = room_features_request
+
+
+ # set the HTTP header `Accept`
+ if 'Accept' not in _header_params:
+ _header_params['Accept'] = self.api_client.select_header_accept(
+ [
+ 'application/json'
+ ]
+ )
+
+ # set the HTTP header `Content-Type`
+ if _content_type:
+ _header_params['Content-Type'] = _content_type
+ else:
+ _default_content_type = (
+ self.api_client.select_header_content_type(
+ [
+ 'application/json'
+ ]
+ )
+ )
+ if _default_content_type is not None:
+ _header_params['Content-Type'] = _default_content_type
+
+ # authentication setting
+ _auth_settings: List[str] = [
+ 'sfsAuthentication'
+ ]
+
+ return self.api_client.param_serialize(
+ method='POST',
+ resource_path='/api/v1/customer/rooms/{streamId}/features',
+ path_params=_path_params,
+ query_params=_query_params,
+ header_params=_header_params,
+ body=_body_params,
+ post_params=_form_params,
+ files=_files,
+ auth_settings=_auth_settings,
+ collection_formats=_collection_formats,
+ _host=_host,
+ _request_auth=_request_auth
+ )
+
+
diff --git a/symphony/bdk/gen/federation_api/search_api.py b/symphony/bdk/gen/federation_api/search_api.py
new file mode 100644
index 00000000..61afe71e
--- /dev/null
+++ b/symphony/bdk/gen/federation_api/search_api.py
@@ -0,0 +1,2539 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+import warnings
+from pydantic import validate_call, Field, StrictFloat, StrictStr, StrictInt
+from typing import Any, Dict, List, Optional, Tuple, Union
+from typing_extensions import Annotated
+
+from decimal import Decimal
+from pydantic import Field, StrictStr, field_validator
+from typing import Optional
+from typing_extensions import Annotated
+from symphony.bdk.gen.federation_model.advisors_search_response import AdvisorsSearchResponse
+from symphony.bdk.gen.federation_model.contacts_response import ContactsResponse
+from symphony.bdk.gen.federation_model.entitlement_response import EntitlementResponse
+from symphony.bdk.gen.federation_model.find_contact_response import FindContactResponse
+from symphony.bdk.gen.federation_model.find_contact_response_v2 import FindContactResponseV2
+from symphony.bdk.gen.federation_model.list_contact_response import ListContactResponse
+
+from symphony.bdk.gen.api_client import ApiClient, RequestSerialized
+from symphony.bdk.gen.api_response import ApiResponse
+from symphony.bdk.gen.rest import RESTResponseType
+
+
+class SearchApi:
+ """NOTE: This class is auto generated by OpenAPI Generator
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+ """
+
+ def __init__(self, api_client=None) -> None:
+ if api_client is None:
+ api_client = ApiClient.get_default()
+ self.api_client = api_client
+
+
+ @validate_call
+ async def find_advisor(
+ self,
+ external_network: Annotated[str, Field(min_length=1, strict=True, description="External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE")],
+ advisor_email_address: Annotated[Optional[StrictStr], Field(description="Advisor's email address")] = None,
+ advisor_symphony_id: Annotated[Optional[StrictStr], Field(description="Advisor's Symphony user ID")] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> EntitlementResponse:
+ """(Deprecated) Search for an advisor (deprecated)
+
+ Search for an advisor by email address or Symphony user ID and external network.
+
+ :param external_network: External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE (required)
+ :type external_network: str
+ :param advisor_email_address: Advisor's email address
+ :type advisor_email_address: str
+ :param advisor_symphony_id: Advisor's Symphony user ID
+ :type advisor_symphony_id: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+ warnings.warn("GET /api/v1/customer/advisors is deprecated.", DeprecationWarning)
+
+ _param = self._find_advisor_serialize(
+ external_network=external_network,
+ advisor_email_address=advisor_email_address,
+ advisor_symphony_id=advisor_symphony_id,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "EntitlementResponse",
+ '404': "AdvisorNotFound",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ ).data
+
+
+ @validate_call
+ async def find_advisor_with_http_info(
+ self,
+ external_network: Annotated[str, Field(min_length=1, strict=True, description="External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE")],
+ advisor_email_address: Annotated[Optional[StrictStr], Field(description="Advisor's email address")] = None,
+ advisor_symphony_id: Annotated[Optional[StrictStr], Field(description="Advisor's Symphony user ID")] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> ApiResponse[EntitlementResponse]:
+ """(Deprecated) Search for an advisor (deprecated)
+
+ Search for an advisor by email address or Symphony user ID and external network.
+
+ :param external_network: External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE (required)
+ :type external_network: str
+ :param advisor_email_address: Advisor's email address
+ :type advisor_email_address: str
+ :param advisor_symphony_id: Advisor's Symphony user ID
+ :type advisor_symphony_id: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+ warnings.warn("GET /api/v1/customer/advisors is deprecated.", DeprecationWarning)
+
+ _param = self._find_advisor_serialize(
+ external_network=external_network,
+ advisor_email_address=advisor_email_address,
+ advisor_symphony_id=advisor_symphony_id,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "EntitlementResponse",
+ '404': "AdvisorNotFound",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ )
+
+
+ @validate_call
+ async def find_advisor_without_preload_content(
+ self,
+ external_network: Annotated[str, Field(min_length=1, strict=True, description="External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE")],
+ advisor_email_address: Annotated[Optional[StrictStr], Field(description="Advisor's email address")] = None,
+ advisor_symphony_id: Annotated[Optional[StrictStr], Field(description="Advisor's Symphony user ID")] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RESTResponseType:
+ """(Deprecated) Search for an advisor (deprecated)
+
+ Search for an advisor by email address or Symphony user ID and external network.
+
+ :param external_network: External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE (required)
+ :type external_network: str
+ :param advisor_email_address: Advisor's email address
+ :type advisor_email_address: str
+ :param advisor_symphony_id: Advisor's Symphony user ID
+ :type advisor_symphony_id: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+ warnings.warn("GET /api/v1/customer/advisors is deprecated.", DeprecationWarning)
+
+ _param = self._find_advisor_serialize(
+ external_network=external_network,
+ advisor_email_address=advisor_email_address,
+ advisor_symphony_id=advisor_symphony_id,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "EntitlementResponse",
+ '404': "AdvisorNotFound",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ return response_data.response
+
+
+ def _find_advisor_serialize(
+ self,
+ external_network,
+ advisor_email_address,
+ advisor_symphony_id,
+ _request_auth,
+ _content_type,
+ _headers,
+ _host_index,
+ ) -> RequestSerialized:
+
+ _host = None
+
+ _collection_formats: Dict[str, str] = {
+ }
+
+ _path_params: Dict[str, str] = {}
+ _query_params: List[Tuple[str, str]] = []
+ _header_params: Dict[str, Optional[str]] = _headers or {}
+ _form_params: List[Tuple[str, str]] = []
+ _files: Dict[
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
+ ] = {}
+ _body_params: Optional[bytes] = None
+
+ # process the path parameters
+ # process the query parameters
+ if external_network is not None:
+
+ _query_params.append(('externalNetwork', external_network))
+
+ if advisor_email_address is not None:
+
+ _query_params.append(('advisorEmailAddress', advisor_email_address))
+
+ if advisor_symphony_id is not None:
+
+ _query_params.append(('advisorSymphonyId', advisor_symphony_id))
+
+ # process the header parameters
+ # process the form parameters
+ # process the body parameter
+
+
+ # set the HTTP header `Accept`
+ if 'Accept' not in _header_params:
+ _header_params['Accept'] = self.api_client.select_header_accept(
+ [
+ 'application/json'
+ ]
+ )
+
+
+ # authentication setting
+ _auth_settings: List[str] = [
+ 'sfsAuthentication'
+ ]
+
+ return self.api_client.param_serialize(
+ method='GET',
+ resource_path='/api/v1/customer/advisors',
+ path_params=_path_params,
+ query_params=_query_params,
+ header_params=_header_params,
+ body=_body_params,
+ post_params=_form_params,
+ files=_files,
+ auth_settings=_auth_settings,
+ collection_formats=_collection_formats,
+ _host=_host,
+ _request_auth=_request_auth
+ )
+
+
+
+
+ @validate_call
+ async def find_advisors(
+ self,
+ external_network: Annotated[str, Field(min_length=1, strict=True, description="The external network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE")],
+ contact_email_address: Annotated[StrictStr, Field(description="Contact's email address")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> AdvisorsSearchResponse:
+ """(Deprecated) Search the advisors of a contact (deprecated)
+
+ Search for the advisors of a provided contact email address for a given external network.
+
+ :param external_network: The external network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE (required)
+ :type external_network: str
+ :param contact_email_address: Contact's email address (required)
+ :type contact_email_address: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+ warnings.warn("GET /api/v1/customer/contacts/contactEmailAddress/{contactEmailAddress}/externalNetwork/{externalNetwork}/advisors is deprecated.", DeprecationWarning)
+
+ _param = self._find_advisors_serialize(
+ external_network=external_network,
+ contact_email_address=contact_email_address,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "AdvisorsSearchResponse",
+ '404': "ContactNotFound",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ ).data
+
+
+ @validate_call
+ async def find_advisors_with_http_info(
+ self,
+ external_network: Annotated[str, Field(min_length=1, strict=True, description="The external network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE")],
+ contact_email_address: Annotated[StrictStr, Field(description="Contact's email address")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> ApiResponse[AdvisorsSearchResponse]:
+ """(Deprecated) Search the advisors of a contact (deprecated)
+
+ Search for the advisors of a provided contact email address for a given external network.
+
+ :param external_network: The external network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE (required)
+ :type external_network: str
+ :param contact_email_address: Contact's email address (required)
+ :type contact_email_address: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+ warnings.warn("GET /api/v1/customer/contacts/contactEmailAddress/{contactEmailAddress}/externalNetwork/{externalNetwork}/advisors is deprecated.", DeprecationWarning)
+
+ _param = self._find_advisors_serialize(
+ external_network=external_network,
+ contact_email_address=contact_email_address,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "AdvisorsSearchResponse",
+ '404': "ContactNotFound",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ )
+
+
+ @validate_call
+ async def find_advisors_without_preload_content(
+ self,
+ external_network: Annotated[str, Field(min_length=1, strict=True, description="The external network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE")],
+ contact_email_address: Annotated[StrictStr, Field(description="Contact's email address")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RESTResponseType:
+ """(Deprecated) Search the advisors of a contact (deprecated)
+
+ Search for the advisors of a provided contact email address for a given external network.
+
+ :param external_network: The external network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE (required)
+ :type external_network: str
+ :param contact_email_address: Contact's email address (required)
+ :type contact_email_address: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+ warnings.warn("GET /api/v1/customer/contacts/contactEmailAddress/{contactEmailAddress}/externalNetwork/{externalNetwork}/advisors is deprecated.", DeprecationWarning)
+
+ _param = self._find_advisors_serialize(
+ external_network=external_network,
+ contact_email_address=contact_email_address,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "AdvisorsSearchResponse",
+ '404': "ContactNotFound",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ return response_data.response
+
+
+ def _find_advisors_serialize(
+ self,
+ external_network,
+ contact_email_address,
+ _request_auth,
+ _content_type,
+ _headers,
+ _host_index,
+ ) -> RequestSerialized:
+
+ _host = None
+
+ _collection_formats: Dict[str, str] = {
+ }
+
+ _path_params: Dict[str, str] = {}
+ _query_params: List[Tuple[str, str]] = []
+ _header_params: Dict[str, Optional[str]] = _headers or {}
+ _form_params: List[Tuple[str, str]] = []
+ _files: Dict[
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
+ ] = {}
+ _body_params: Optional[bytes] = None
+
+ # process the path parameters
+ if external_network is not None:
+ _path_params['externalNetwork'] = external_network
+ if contact_email_address is not None:
+ _path_params['contactEmailAddress'] = contact_email_address
+ # process the query parameters
+ # process the header parameters
+ # process the form parameters
+ # process the body parameter
+
+
+ # set the HTTP header `Accept`
+ if 'Accept' not in _header_params:
+ _header_params['Accept'] = self.api_client.select_header_accept(
+ [
+ 'application/json'
+ ]
+ )
+
+
+ # authentication setting
+ _auth_settings: List[str] = [
+ 'sfsAuthentication'
+ ]
+
+ return self.api_client.param_serialize(
+ method='GET',
+ resource_path='/api/v1/customer/contacts/contactEmailAddress/{contactEmailAddress}/externalNetwork/{externalNetwork}/advisors',
+ path_params=_path_params,
+ query_params=_query_params,
+ header_params=_header_params,
+ body=_body_params,
+ post_params=_form_params,
+ files=_files,
+ auth_settings=_auth_settings,
+ collection_formats=_collection_formats,
+ _host=_host,
+ _request_auth=_request_auth
+ )
+
+
+
+
+ @validate_call
+ async def find_advisorsv2(
+ self,
+ contact_symphony_id: Annotated[Decimal, Field(description="The Contact's Symphony user ID")],
+ before: Annotated[Optional[StrictStr], Field(description="The before cursor for pagination")] = None,
+ after: Annotated[Optional[StrictStr], Field(description="The after cursor for pagination")] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> AdvisorsSearchResponse:
+ """List a contact’s advisors (recommended)
+
+ Search for the advisors of a provided contact email address for a given external network.
+
+ :param contact_symphony_id: The Contact's Symphony user ID (required)
+ :type contact_symphony_id: decimal.Decimal
+ :param before: The before cursor for pagination
+ :type before: str
+ :param after: The after cursor for pagination
+ :type after: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._find_advisorsv2_serialize(
+ contact_symphony_id=contact_symphony_id,
+ before=before,
+ after=after,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "AdvisorsSearchResponse",
+ '404': "ContactNotFound",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ ).data
+
+
+ @validate_call
+ async def find_advisorsv2_with_http_info(
+ self,
+ contact_symphony_id: Annotated[Decimal, Field(description="The Contact's Symphony user ID")],
+ before: Annotated[Optional[StrictStr], Field(description="The before cursor for pagination")] = None,
+ after: Annotated[Optional[StrictStr], Field(description="The after cursor for pagination")] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> ApiResponse[AdvisorsSearchResponse]:
+ """List a contact’s advisors (recommended)
+
+ Search for the advisors of a provided contact email address for a given external network.
+
+ :param contact_symphony_id: The Contact's Symphony user ID (required)
+ :type contact_symphony_id: decimal.Decimal
+ :param before: The before cursor for pagination
+ :type before: str
+ :param after: The after cursor for pagination
+ :type after: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._find_advisorsv2_serialize(
+ contact_symphony_id=contact_symphony_id,
+ before=before,
+ after=after,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "AdvisorsSearchResponse",
+ '404': "ContactNotFound",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ )
+
+
+ @validate_call
+ async def find_advisorsv2_without_preload_content(
+ self,
+ contact_symphony_id: Annotated[Decimal, Field(description="The Contact's Symphony user ID")],
+ before: Annotated[Optional[StrictStr], Field(description="The before cursor for pagination")] = None,
+ after: Annotated[Optional[StrictStr], Field(description="The after cursor for pagination")] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RESTResponseType:
+ """List a contact’s advisors (recommended)
+
+ Search for the advisors of a provided contact email address for a given external network.
+
+ :param contact_symphony_id: The Contact's Symphony user ID (required)
+ :type contact_symphony_id: decimal.Decimal
+ :param before: The before cursor for pagination
+ :type before: str
+ :param after: The after cursor for pagination
+ :type after: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._find_advisorsv2_serialize(
+ contact_symphony_id=contact_symphony_id,
+ before=before,
+ after=after,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "AdvisorsSearchResponse",
+ '404': "ContactNotFound",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ return response_data.response
+
+
+ def _find_advisorsv2_serialize(
+ self,
+ contact_symphony_id,
+ before,
+ after,
+ _request_auth,
+ _content_type,
+ _headers,
+ _host_index,
+ ) -> RequestSerialized:
+
+ _host = None
+
+ _collection_formats: Dict[str, str] = {
+ }
+
+ _path_params: Dict[str, str] = {}
+ _query_params: List[Tuple[str, str]] = []
+ _header_params: Dict[str, Optional[str]] = _headers or {}
+ _form_params: List[Tuple[str, str]] = []
+ _files: Dict[
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
+ ] = {}
+ _body_params: Optional[bytes] = None
+
+ # process the path parameters
+ if contact_symphony_id is not None:
+ _path_params['contactSymphonyId'] = contact_symphony_id
+ # process the query parameters
+ if before is not None:
+
+ _query_params.append(('before', before))
+
+ if after is not None:
+
+ _query_params.append(('after', after))
+
+ # process the header parameters
+ # process the form parameters
+ # process the body parameter
+
+
+ # set the HTTP header `Accept`
+ if 'Accept' not in _header_params:
+ _header_params['Accept'] = self.api_client.select_header_accept(
+ [
+ 'application/json'
+ ]
+ )
+
+
+ # authentication setting
+ _auth_settings: List[str] = [
+ 'sfsAuthentication'
+ ]
+
+ return self.api_client.param_serialize(
+ method='GET',
+ resource_path='/api/v2/customer/contacts/{contactSymphonyId}/advisors',
+ path_params=_path_params,
+ query_params=_query_params,
+ header_params=_header_params,
+ body=_body_params,
+ post_params=_form_params,
+ files=_files,
+ auth_settings=_auth_settings,
+ collection_formats=_collection_formats,
+ _host=_host,
+ _request_auth=_request_auth
+ )
+
+
+
+
+ @validate_call
+ async def find_contacts(
+ self,
+ external_network: Annotated[str, Field(min_length=1, strict=True, description="The external network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE")],
+ email_address: Annotated[StrictStr, Field(description="Contact's email address")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> FindContactResponse:
+ """(Deprecated) Find a contact (deprecated)
+
+ Find a contact searching by email address and external network
+
+ :param external_network: The external network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE (required)
+ :type external_network: str
+ :param email_address: Contact's email address (required)
+ :type email_address: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+ warnings.warn("GET /api/v1/customer/contacts is deprecated.", DeprecationWarning)
+
+ _param = self._find_contacts_serialize(
+ external_network=external_network,
+ email_address=email_address,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "FindContactResponse",
+ '404': "ContactNotFound",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ ).data
+
+
+ @validate_call
+ async def find_contacts_with_http_info(
+ self,
+ external_network: Annotated[str, Field(min_length=1, strict=True, description="The external network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE")],
+ email_address: Annotated[StrictStr, Field(description="Contact's email address")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> ApiResponse[FindContactResponse]:
+ """(Deprecated) Find a contact (deprecated)
+
+ Find a contact searching by email address and external network
+
+ :param external_network: The external network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE (required)
+ :type external_network: str
+ :param email_address: Contact's email address (required)
+ :type email_address: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+ warnings.warn("GET /api/v1/customer/contacts is deprecated.", DeprecationWarning)
+
+ _param = self._find_contacts_serialize(
+ external_network=external_network,
+ email_address=email_address,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "FindContactResponse",
+ '404': "ContactNotFound",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ )
+
+
+ @validate_call
+ async def find_contacts_without_preload_content(
+ self,
+ external_network: Annotated[str, Field(min_length=1, strict=True, description="The external network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE")],
+ email_address: Annotated[StrictStr, Field(description="Contact's email address")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RESTResponseType:
+ """(Deprecated) Find a contact (deprecated)
+
+ Find a contact searching by email address and external network
+
+ :param external_network: The external network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE (required)
+ :type external_network: str
+ :param email_address: Contact's email address (required)
+ :type email_address: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+ warnings.warn("GET /api/v1/customer/contacts is deprecated.", DeprecationWarning)
+
+ _param = self._find_contacts_serialize(
+ external_network=external_network,
+ email_address=email_address,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "FindContactResponse",
+ '404': "ContactNotFound",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ return response_data.response
+
+
+ def _find_contacts_serialize(
+ self,
+ external_network,
+ email_address,
+ _request_auth,
+ _content_type,
+ _headers,
+ _host_index,
+ ) -> RequestSerialized:
+
+ _host = None
+
+ _collection_formats: Dict[str, str] = {
+ }
+
+ _path_params: Dict[str, str] = {}
+ _query_params: List[Tuple[str, str]] = []
+ _header_params: Dict[str, Optional[str]] = _headers or {}
+ _form_params: List[Tuple[str, str]] = []
+ _files: Dict[
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
+ ] = {}
+ _body_params: Optional[bytes] = None
+
+ # process the path parameters
+ # process the query parameters
+ if external_network is not None:
+
+ _query_params.append(('externalNetwork', external_network))
+
+ if email_address is not None:
+
+ _query_params.append(('emailAddress', email_address))
+
+ # process the header parameters
+ # process the form parameters
+ # process the body parameter
+
+
+ # set the HTTP header `Accept`
+ if 'Accept' not in _header_params:
+ _header_params['Accept'] = self.api_client.select_header_accept(
+ [
+ 'application/json'
+ ]
+ )
+
+
+ # authentication setting
+ _auth_settings: List[str] = [
+ 'sfsAuthentication'
+ ]
+
+ return self.api_client.param_serialize(
+ method='GET',
+ resource_path='/api/v1/customer/contacts',
+ path_params=_path_params,
+ query_params=_query_params,
+ header_params=_header_params,
+ body=_body_params,
+ post_params=_form_params,
+ files=_files,
+ auth_settings=_auth_settings,
+ collection_formats=_collection_formats,
+ _host=_host,
+ _request_auth=_request_auth
+ )
+
+
+
+
+ @validate_call
+ async def find_contacts_of_advisor(
+ self,
+ external_network: Annotated[str, Field(min_length=1, strict=True, description="The external network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE")],
+ advisor_email_address: Annotated[StrictStr, Field(description="Advisor's email address")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> ContactsResponse:
+ """(Deprecated) Search an advisor's contacts (deprecated)
+
+ Search for contacts associated with the advisor whose email address is provided for a given external network.
+
+ :param external_network: The external network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE (required)
+ :type external_network: str
+ :param advisor_email_address: Advisor's email address (required)
+ :type advisor_email_address: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+ warnings.warn("GET /api/v1/customer/advisors/advisorEmailAddress/{advisorEmailAddress}/externalNetwork/{externalNetwork}/contacts is deprecated.", DeprecationWarning)
+
+ _param = self._find_contacts_of_advisor_serialize(
+ external_network=external_network,
+ advisor_email_address=advisor_email_address,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "ContactsResponse",
+ '404': "AdvisorNotFound",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ ).data
+
+
+ @validate_call
+ async def find_contacts_of_advisor_with_http_info(
+ self,
+ external_network: Annotated[str, Field(min_length=1, strict=True, description="The external network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE")],
+ advisor_email_address: Annotated[StrictStr, Field(description="Advisor's email address")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> ApiResponse[ContactsResponse]:
+ """(Deprecated) Search an advisor's contacts (deprecated)
+
+ Search for contacts associated with the advisor whose email address is provided for a given external network.
+
+ :param external_network: The external network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE (required)
+ :type external_network: str
+ :param advisor_email_address: Advisor's email address (required)
+ :type advisor_email_address: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+ warnings.warn("GET /api/v1/customer/advisors/advisorEmailAddress/{advisorEmailAddress}/externalNetwork/{externalNetwork}/contacts is deprecated.", DeprecationWarning)
+
+ _param = self._find_contacts_of_advisor_serialize(
+ external_network=external_network,
+ advisor_email_address=advisor_email_address,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "ContactsResponse",
+ '404': "AdvisorNotFound",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ )
+
+
+ @validate_call
+ async def find_contacts_of_advisor_without_preload_content(
+ self,
+ external_network: Annotated[str, Field(min_length=1, strict=True, description="The external network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE")],
+ advisor_email_address: Annotated[StrictStr, Field(description="Advisor's email address")],
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RESTResponseType:
+ """(Deprecated) Search an advisor's contacts (deprecated)
+
+ Search for contacts associated with the advisor whose email address is provided for a given external network.
+
+ :param external_network: The external network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE (required)
+ :type external_network: str
+ :param advisor_email_address: Advisor's email address (required)
+ :type advisor_email_address: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+ warnings.warn("GET /api/v1/customer/advisors/advisorEmailAddress/{advisorEmailAddress}/externalNetwork/{externalNetwork}/contacts is deprecated.", DeprecationWarning)
+
+ _param = self._find_contacts_of_advisor_serialize(
+ external_network=external_network,
+ advisor_email_address=advisor_email_address,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "ContactsResponse",
+ '404': "AdvisorNotFound",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ return response_data.response
+
+
+ def _find_contacts_of_advisor_serialize(
+ self,
+ external_network,
+ advisor_email_address,
+ _request_auth,
+ _content_type,
+ _headers,
+ _host_index,
+ ) -> RequestSerialized:
+
+ _host = None
+
+ _collection_formats: Dict[str, str] = {
+ }
+
+ _path_params: Dict[str, str] = {}
+ _query_params: List[Tuple[str, str]] = []
+ _header_params: Dict[str, Optional[str]] = _headers or {}
+ _form_params: List[Tuple[str, str]] = []
+ _files: Dict[
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
+ ] = {}
+ _body_params: Optional[bytes] = None
+
+ # process the path parameters
+ if external_network is not None:
+ _path_params['externalNetwork'] = external_network
+ if advisor_email_address is not None:
+ _path_params['advisorEmailAddress'] = advisor_email_address
+ # process the query parameters
+ # process the header parameters
+ # process the form parameters
+ # process the body parameter
+
+
+ # set the HTTP header `Accept`
+ if 'Accept' not in _header_params:
+ _header_params['Accept'] = self.api_client.select_header_accept(
+ [
+ 'application/json'
+ ]
+ )
+
+
+ # authentication setting
+ _auth_settings: List[str] = [
+ 'sfsAuthentication'
+ ]
+
+ return self.api_client.param_serialize(
+ method='GET',
+ resource_path='/api/v1/customer/advisors/advisorEmailAddress/{advisorEmailAddress}/externalNetwork/{externalNetwork}/contacts',
+ path_params=_path_params,
+ query_params=_query_params,
+ header_params=_header_params,
+ body=_body_params,
+ post_params=_form_params,
+ files=_files,
+ auth_settings=_auth_settings,
+ collection_formats=_collection_formats,
+ _host=_host,
+ _request_auth=_request_auth
+ )
+
+
+
+
+ @validate_call
+ async def find_contacts_of_advisorv2(
+ self,
+ external_network: Annotated[str, Field(min_length=1, strict=True, description="The external network: WHATSAPP, SMS, WECHAT, SMS-DIRECT, LINE or WHATSAPP-DIRECT")],
+ advisor_symphony_id: Annotated[Decimal, Field(description="Advisor's Symphony user ID")],
+ before: Annotated[Optional[StrictStr], Field(description="The before cursor for pagination")] = None,
+ after: Annotated[Optional[StrictStr], Field(description="The after cursor for pagination")] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> ContactsResponse:
+ """List an advisor's contacts (recommended)
+
+ Search for the contacts associated with the provided advisor’s Symphony user ID for a given external network.
+
+ :param external_network: The external network: WHATSAPP, SMS, WECHAT, SMS-DIRECT, LINE or WHATSAPP-DIRECT (required)
+ :type external_network: str
+ :param advisor_symphony_id: Advisor's Symphony user ID (required)
+ :type advisor_symphony_id: decimal.Decimal
+ :param before: The before cursor for pagination
+ :type before: str
+ :param after: The after cursor for pagination
+ :type after: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._find_contacts_of_advisorv2_serialize(
+ external_network=external_network,
+ advisor_symphony_id=advisor_symphony_id,
+ before=before,
+ after=after,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "ContactsResponse",
+ '404': "AdvisorNotFound",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ ).data
+
+
+ @validate_call
+ async def find_contacts_of_advisorv2_with_http_info(
+ self,
+ external_network: Annotated[str, Field(min_length=1, strict=True, description="The external network: WHATSAPP, SMS, WECHAT, SMS-DIRECT, LINE or WHATSAPP-DIRECT")],
+ advisor_symphony_id: Annotated[Decimal, Field(description="Advisor's Symphony user ID")],
+ before: Annotated[Optional[StrictStr], Field(description="The before cursor for pagination")] = None,
+ after: Annotated[Optional[StrictStr], Field(description="The after cursor for pagination")] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> ApiResponse[ContactsResponse]:
+ """List an advisor's contacts (recommended)
+
+ Search for the contacts associated with the provided advisor’s Symphony user ID for a given external network.
+
+ :param external_network: The external network: WHATSAPP, SMS, WECHAT, SMS-DIRECT, LINE or WHATSAPP-DIRECT (required)
+ :type external_network: str
+ :param advisor_symphony_id: Advisor's Symphony user ID (required)
+ :type advisor_symphony_id: decimal.Decimal
+ :param before: The before cursor for pagination
+ :type before: str
+ :param after: The after cursor for pagination
+ :type after: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._find_contacts_of_advisorv2_serialize(
+ external_network=external_network,
+ advisor_symphony_id=advisor_symphony_id,
+ before=before,
+ after=after,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "ContactsResponse",
+ '404': "AdvisorNotFound",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ )
+
+
+ @validate_call
+ async def find_contacts_of_advisorv2_without_preload_content(
+ self,
+ external_network: Annotated[str, Field(min_length=1, strict=True, description="The external network: WHATSAPP, SMS, WECHAT, SMS-DIRECT, LINE or WHATSAPP-DIRECT")],
+ advisor_symphony_id: Annotated[Decimal, Field(description="Advisor's Symphony user ID")],
+ before: Annotated[Optional[StrictStr], Field(description="The before cursor for pagination")] = None,
+ after: Annotated[Optional[StrictStr], Field(description="The after cursor for pagination")] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RESTResponseType:
+ """List an advisor's contacts (recommended)
+
+ Search for the contacts associated with the provided advisor’s Symphony user ID for a given external network.
+
+ :param external_network: The external network: WHATSAPP, SMS, WECHAT, SMS-DIRECT, LINE or WHATSAPP-DIRECT (required)
+ :type external_network: str
+ :param advisor_symphony_id: Advisor's Symphony user ID (required)
+ :type advisor_symphony_id: decimal.Decimal
+ :param before: The before cursor for pagination
+ :type before: str
+ :param after: The after cursor for pagination
+ :type after: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._find_contacts_of_advisorv2_serialize(
+ external_network=external_network,
+ advisor_symphony_id=advisor_symphony_id,
+ before=before,
+ after=after,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "ContactsResponse",
+ '404': "AdvisorNotFound",
+ '401': "Unauthorized",
+ '403': "Forbidden",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ return response_data.response
+
+
+ def _find_contacts_of_advisorv2_serialize(
+ self,
+ external_network,
+ advisor_symphony_id,
+ before,
+ after,
+ _request_auth,
+ _content_type,
+ _headers,
+ _host_index,
+ ) -> RequestSerialized:
+
+ _host = None
+
+ _collection_formats: Dict[str, str] = {
+ }
+
+ _path_params: Dict[str, str] = {}
+ _query_params: List[Tuple[str, str]] = []
+ _header_params: Dict[str, Optional[str]] = _headers or {}
+ _form_params: List[Tuple[str, str]] = []
+ _files: Dict[
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
+ ] = {}
+ _body_params: Optional[bytes] = None
+
+ # process the path parameters
+ if external_network is not None:
+ _path_params['externalNetwork'] = external_network
+ if advisor_symphony_id is not None:
+ _path_params['advisorSymphonyId'] = advisor_symphony_id
+ # process the query parameters
+ if before is not None:
+
+ _query_params.append(('before', before))
+
+ if after is not None:
+
+ _query_params.append(('after', after))
+
+ # process the header parameters
+ # process the form parameters
+ # process the body parameter
+
+
+ # set the HTTP header `Accept`
+ if 'Accept' not in _header_params:
+ _header_params['Accept'] = self.api_client.select_header_accept(
+ [
+ 'application/json'
+ ]
+ )
+
+
+ # authentication setting
+ _auth_settings: List[str] = [
+ 'sfsAuthentication'
+ ]
+
+ return self.api_client.param_serialize(
+ method='GET',
+ resource_path='/api/v1/customer/advisors/{advisorSymphonyId}/externalNetwork/{externalNetwork}/contacts',
+ path_params=_path_params,
+ query_params=_query_params,
+ header_params=_header_params,
+ body=_body_params,
+ post_params=_form_params,
+ files=_files,
+ auth_settings=_auth_settings,
+ collection_formats=_collection_formats,
+ _host=_host,
+ _request_auth=_request_auth
+ )
+
+
+
+
+ @validate_call
+ async def get_contact(
+ self,
+ phone_number: Annotated[StrictStr, Field(description="contact's phone number")],
+ external_network: Annotated[StrictStr, Field(description="contact's external network")],
+ federation_group_id: Annotated[Optional[StrictStr], Field(description="contact's federationGroupId")] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> FindContactResponseV2:
+ """Get contact
+
+ Get a contact searching by their phone number, their external network and, optionally, their advisor's federation group.
+
+ :param phone_number: contact's phone number (required)
+ :type phone_number: str
+ :param external_network: contact's external network (required)
+ :type external_network: str
+ :param federation_group_id: contact's federationGroupId
+ :type federation_group_id: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._get_contact_serialize(
+ phone_number=phone_number,
+ external_network=external_network,
+ federation_group_id=federation_group_id,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "FindContactResponseV2",
+ '400': "ExternalNetworkNotFound",
+ '404': "ContactNotFound",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ ).data
+
+
+ @validate_call
+ async def get_contact_with_http_info(
+ self,
+ phone_number: Annotated[StrictStr, Field(description="contact's phone number")],
+ external_network: Annotated[StrictStr, Field(description="contact's external network")],
+ federation_group_id: Annotated[Optional[StrictStr], Field(description="contact's federationGroupId")] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> ApiResponse[FindContactResponseV2]:
+ """Get contact
+
+ Get a contact searching by their phone number, their external network and, optionally, their advisor's federation group.
+
+ :param phone_number: contact's phone number (required)
+ :type phone_number: str
+ :param external_network: contact's external network (required)
+ :type external_network: str
+ :param federation_group_id: contact's federationGroupId
+ :type federation_group_id: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._get_contact_serialize(
+ phone_number=phone_number,
+ external_network=external_network,
+ federation_group_id=federation_group_id,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "FindContactResponseV2",
+ '400': "ExternalNetworkNotFound",
+ '404': "ContactNotFound",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ )
+
+
+ @validate_call
+ async def get_contact_without_preload_content(
+ self,
+ phone_number: Annotated[StrictStr, Field(description="contact's phone number")],
+ external_network: Annotated[StrictStr, Field(description="contact's external network")],
+ federation_group_id: Annotated[Optional[StrictStr], Field(description="contact's federationGroupId")] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RESTResponseType:
+ """Get contact
+
+ Get a contact searching by their phone number, their external network and, optionally, their advisor's federation group.
+
+ :param phone_number: contact's phone number (required)
+ :type phone_number: str
+ :param external_network: contact's external network (required)
+ :type external_network: str
+ :param federation_group_id: contact's federationGroupId
+ :type federation_group_id: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._get_contact_serialize(
+ phone_number=phone_number,
+ external_network=external_network,
+ federation_group_id=federation_group_id,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "FindContactResponseV2",
+ '400': "ExternalNetworkNotFound",
+ '404': "ContactNotFound",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ return response_data.response
+
+
+ def _get_contact_serialize(
+ self,
+ phone_number,
+ external_network,
+ federation_group_id,
+ _request_auth,
+ _content_type,
+ _headers,
+ _host_index,
+ ) -> RequestSerialized:
+
+ _host = None
+
+ _collection_formats: Dict[str, str] = {
+ }
+
+ _path_params: Dict[str, str] = {}
+ _query_params: List[Tuple[str, str]] = []
+ _header_params: Dict[str, Optional[str]] = _headers or {}
+ _form_params: List[Tuple[str, str]] = []
+ _files: Dict[
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
+ ] = {}
+ _body_params: Optional[bytes] = None
+
+ # process the path parameters
+ # process the query parameters
+ if phone_number is not None:
+
+ _query_params.append(('phoneNumber', phone_number))
+
+ if external_network is not None:
+
+ _query_params.append(('externalNetwork', external_network))
+
+ if federation_group_id is not None:
+
+ _query_params.append(('federationGroupId', federation_group_id))
+
+ # process the header parameters
+ # process the form parameters
+ # process the body parameter
+
+
+ # set the HTTP header `Accept`
+ if 'Accept' not in _header_params:
+ _header_params['Accept'] = self.api_client.select_header_accept(
+ [
+ 'application/json'
+ ]
+ )
+
+
+ # authentication setting
+ _auth_settings: List[str] = [
+ 'sfsAuthentication'
+ ]
+
+ return self.api_client.param_serialize(
+ method='GET',
+ resource_path='/api/v2/customer/contact',
+ path_params=_path_params,
+ query_params=_query_params,
+ header_params=_header_params,
+ body=_body_params,
+ post_params=_form_params,
+ files=_files,
+ auth_settings=_auth_settings,
+ collection_formats=_collection_formats,
+ _host=_host,
+ _request_auth=_request_auth
+ )
+
+
+
+
+ @validate_call
+ async def list_contacts2(
+ self,
+ external_network: Annotated[str, Field(min_length=1, strict=True, description="The external network: WHATSAPP, SMS, WECHAT, SMS-DIRECT, LINE or WHATSAPP-DIRECT")],
+ email_address: Annotated[Optional[StrictStr], Field(description="Contact's email address")] = None,
+ phone_number: Annotated[Optional[StrictStr], Field(description="Contact's phone number")] = None,
+ symphony_id: Annotated[Optional[Annotated[str, Field(strict=True)]], Field(description="Contact's Symphony user ID")] = None,
+ advisor_symphony_id: Annotated[Optional[Annotated[str, Field(strict=True)]], Field(description="The advisor's Symphony ID")] = None,
+ phone_blocked: Annotated[Optional[StrictStr], Field(description="Filter only available or blocked contact's phones")] = None,
+ before: Annotated[Optional[StrictStr], Field(description="The before cursor for pagination")] = None,
+ after: Annotated[Optional[StrictStr], Field(description="The after cursor for pagination")] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> ListContactResponse:
+ """List contacts (recommended)
+
+ List contacts, can query by emailAddress, phoneNumber or by contactSymphonyId or by advisorSymphonyId. If the advisor has the admin:list-customers permission, they will be able to retrieve all pod contacts for a given externalNetwork, or to see other advisor's list of contacts.
+
+ :param external_network: The external network: WHATSAPP, SMS, WECHAT, SMS-DIRECT, LINE or WHATSAPP-DIRECT (required)
+ :type external_network: str
+ :param email_address: Contact's email address
+ :type email_address: str
+ :param phone_number: Contact's phone number
+ :type phone_number: str
+ :param symphony_id: Contact's Symphony user ID
+ :type symphony_id: str
+ :param advisor_symphony_id: The advisor's Symphony ID
+ :type advisor_symphony_id: str
+ :param phone_blocked: Filter only available or blocked contact's phones
+ :type phone_blocked: str
+ :param before: The before cursor for pagination
+ :type before: str
+ :param after: The after cursor for pagination
+ :type after: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._list_contacts2_serialize(
+ external_network=external_network,
+ email_address=email_address,
+ phone_number=phone_number,
+ symphony_id=symphony_id,
+ advisor_symphony_id=advisor_symphony_id,
+ phone_blocked=phone_blocked,
+ before=before,
+ after=after,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "ListContactResponse",
+ '404': "ListContacts2404Response",
+ '401': "Unauthorized",
+ '403': "ListContacts2403Response",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ ).data
+
+
+ @validate_call
+ async def list_contacts2_with_http_info(
+ self,
+ external_network: Annotated[str, Field(min_length=1, strict=True, description="The external network: WHATSAPP, SMS, WECHAT, SMS-DIRECT, LINE or WHATSAPP-DIRECT")],
+ email_address: Annotated[Optional[StrictStr], Field(description="Contact's email address")] = None,
+ phone_number: Annotated[Optional[StrictStr], Field(description="Contact's phone number")] = None,
+ symphony_id: Annotated[Optional[Annotated[str, Field(strict=True)]], Field(description="Contact's Symphony user ID")] = None,
+ advisor_symphony_id: Annotated[Optional[Annotated[str, Field(strict=True)]], Field(description="The advisor's Symphony ID")] = None,
+ phone_blocked: Annotated[Optional[StrictStr], Field(description="Filter only available or blocked contact's phones")] = None,
+ before: Annotated[Optional[StrictStr], Field(description="The before cursor for pagination")] = None,
+ after: Annotated[Optional[StrictStr], Field(description="The after cursor for pagination")] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> ApiResponse[ListContactResponse]:
+ """List contacts (recommended)
+
+ List contacts, can query by emailAddress, phoneNumber or by contactSymphonyId or by advisorSymphonyId. If the advisor has the admin:list-customers permission, they will be able to retrieve all pod contacts for a given externalNetwork, or to see other advisor's list of contacts.
+
+ :param external_network: The external network: WHATSAPP, SMS, WECHAT, SMS-DIRECT, LINE or WHATSAPP-DIRECT (required)
+ :type external_network: str
+ :param email_address: Contact's email address
+ :type email_address: str
+ :param phone_number: Contact's phone number
+ :type phone_number: str
+ :param symphony_id: Contact's Symphony user ID
+ :type symphony_id: str
+ :param advisor_symphony_id: The advisor's Symphony ID
+ :type advisor_symphony_id: str
+ :param phone_blocked: Filter only available or blocked contact's phones
+ :type phone_blocked: str
+ :param before: The before cursor for pagination
+ :type before: str
+ :param after: The after cursor for pagination
+ :type after: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._list_contacts2_serialize(
+ external_network=external_network,
+ email_address=email_address,
+ phone_number=phone_number,
+ symphony_id=symphony_id,
+ advisor_symphony_id=advisor_symphony_id,
+ phone_blocked=phone_blocked,
+ before=before,
+ after=after,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "ListContactResponse",
+ '404': "ListContacts2404Response",
+ '401': "Unauthorized",
+ '403': "ListContacts2403Response",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ await response_data.read()
+ return self.api_client.response_deserialize(
+ response_data=response_data,
+ response_types_map=_response_types_map,
+ )
+
+
+ @validate_call
+ async def list_contacts2_without_preload_content(
+ self,
+ external_network: Annotated[str, Field(min_length=1, strict=True, description="The external network: WHATSAPP, SMS, WECHAT, SMS-DIRECT, LINE or WHATSAPP-DIRECT")],
+ email_address: Annotated[Optional[StrictStr], Field(description="Contact's email address")] = None,
+ phone_number: Annotated[Optional[StrictStr], Field(description="Contact's phone number")] = None,
+ symphony_id: Annotated[Optional[Annotated[str, Field(strict=True)]], Field(description="Contact's Symphony user ID")] = None,
+ advisor_symphony_id: Annotated[Optional[Annotated[str, Field(strict=True)]], Field(description="The advisor's Symphony ID")] = None,
+ phone_blocked: Annotated[Optional[StrictStr], Field(description="Filter only available or blocked contact's phones")] = None,
+ before: Annotated[Optional[StrictStr], Field(description="The before cursor for pagination")] = None,
+ after: Annotated[Optional[StrictStr], Field(description="The after cursor for pagination")] = None,
+ _request_timeout: Union[
+ None,
+ Annotated[StrictFloat, Field(gt=0)],
+ Tuple[
+ Annotated[StrictFloat, Field(gt=0)],
+ Annotated[StrictFloat, Field(gt=0)]
+ ]
+ ] = None,
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
+ _content_type: Optional[StrictStr] = None,
+ _headers: Optional[Dict[StrictStr, Any]] = None,
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
+ ) -> RESTResponseType:
+ """List contacts (recommended)
+
+ List contacts, can query by emailAddress, phoneNumber or by contactSymphonyId or by advisorSymphonyId. If the advisor has the admin:list-customers permission, they will be able to retrieve all pod contacts for a given externalNetwork, or to see other advisor's list of contacts.
+
+ :param external_network: The external network: WHATSAPP, SMS, WECHAT, SMS-DIRECT, LINE or WHATSAPP-DIRECT (required)
+ :type external_network: str
+ :param email_address: Contact's email address
+ :type email_address: str
+ :param phone_number: Contact's phone number
+ :type phone_number: str
+ :param symphony_id: Contact's Symphony user ID
+ :type symphony_id: str
+ :param advisor_symphony_id: The advisor's Symphony ID
+ :type advisor_symphony_id: str
+ :param phone_blocked: Filter only available or blocked contact's phones
+ :type phone_blocked: str
+ :param before: The before cursor for pagination
+ :type before: str
+ :param after: The after cursor for pagination
+ :type after: str
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :type _request_timeout: int, tuple(int, int), optional
+ :param _request_auth: set to override the auth_settings for an a single
+ request; this effectively ignores the
+ authentication in the spec for a single request.
+ :type _request_auth: dict, optional
+ :param _content_type: force content-type for the request.
+ :type _content_type: str, Optional
+ :param _headers: set to override the headers for a single
+ request; this effectively ignores the headers
+ in the spec for a single request.
+ :type _headers: dict, optional
+ :param _host_index: set to override the host_index for a single
+ request; this effectively ignores the host_index
+ in the spec for a single request.
+ :type _host_index: int, optional
+ :return: Returns the result object.
+ """ # noqa: E501
+
+ _param = self._list_contacts2_serialize(
+ external_network=external_network,
+ email_address=email_address,
+ phone_number=phone_number,
+ symphony_id=symphony_id,
+ advisor_symphony_id=advisor_symphony_id,
+ phone_blocked=phone_blocked,
+ before=before,
+ after=after,
+ _request_auth=_request_auth,
+ _content_type=_content_type,
+ _headers=_headers,
+ _host_index=_host_index
+ )
+
+ _response_types_map: Dict[str, Optional[str]] = {
+ '200': "ListContactResponse",
+ '404': "ListContacts2404Response",
+ '401': "Unauthorized",
+ '403': "ListContacts2403Response",
+ }
+ response_data = await self.api_client.call_api(
+ *_param,
+ _request_timeout=_request_timeout
+ )
+ return response_data.response
+
+
+ def _list_contacts2_serialize(
+ self,
+ external_network,
+ email_address,
+ phone_number,
+ symphony_id,
+ advisor_symphony_id,
+ phone_blocked,
+ before,
+ after,
+ _request_auth,
+ _content_type,
+ _headers,
+ _host_index,
+ ) -> RequestSerialized:
+
+ _host = None
+
+ _collection_formats: Dict[str, str] = {
+ }
+
+ _path_params: Dict[str, str] = {}
+ _query_params: List[Tuple[str, str]] = []
+ _header_params: Dict[str, Optional[str]] = _headers or {}
+ _form_params: List[Tuple[str, str]] = []
+ _files: Dict[
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
+ ] = {}
+ _body_params: Optional[bytes] = None
+
+ # process the path parameters
+ # process the query parameters
+ if external_network is not None:
+
+ _query_params.append(('externalNetwork', external_network))
+
+ if email_address is not None:
+
+ _query_params.append(('emailAddress', email_address))
+
+ if phone_number is not None:
+
+ _query_params.append(('phoneNumber', phone_number))
+
+ if symphony_id is not None:
+
+ _query_params.append(('symphonyId', symphony_id))
+
+ if advisor_symphony_id is not None:
+
+ _query_params.append(('advisorSymphonyId', advisor_symphony_id))
+
+ if phone_blocked is not None:
+
+ _query_params.append(('phoneBlocked', phone_blocked))
+
+ if before is not None:
+
+ _query_params.append(('before', before))
+
+ if after is not None:
+
+ _query_params.append(('after', after))
+
+ # process the header parameters
+ # process the form parameters
+ # process the body parameter
+
+
+ # set the HTTP header `Accept`
+ if 'Accept' not in _header_params:
+ _header_params['Accept'] = self.api_client.select_header_accept(
+ [
+ 'application/json'
+ ]
+ )
+
+
+ # authentication setting
+ _auth_settings: List[str] = [
+ 'sfsAuthentication'
+ ]
+
+ return self.api_client.param_serialize(
+ method='GET',
+ resource_path='/api/v2/customer/contacts',
+ path_params=_path_params,
+ query_params=_query_params,
+ header_params=_header_params,
+ body=_body_params,
+ post_params=_form_params,
+ files=_files,
+ auth_settings=_auth_settings,
+ collection_formats=_collection_formats,
+ _host=_host,
+ _request_auth=_request_auth
+ )
+
+
diff --git a/symphony/bdk/gen/federation_model/add_contact403_response.py b/symphony/bdk/gen/federation_model/add_contact403_response.py
new file mode 100644
index 00000000..faba93bb
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/add_contact403_response.py
@@ -0,0 +1,165 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import json
+import pprint
+from pydantic import BaseModel, ConfigDict, Field, StrictStr, ValidationError, field_validator
+from typing import Any, List, Optional
+from symphony.bdk.gen.federation_model.forbidden import Forbidden
+from symphony.bdk.gen.federation_model.inline_response403 import InlineResponse403
+from symphony.bdk.gen.federation_model.phone_international_onboarding_forbidden import PhoneInternationalOnboardingForbidden
+from symphony.bdk.gen.federation_model.user_id_mismatch import UserIdMismatch
+from pydantic import StrictStr, Field
+from typing import Union, List, Set, Optional, Dict
+from typing_extensions import Literal, Self
+
+ADDCONTACT403RESPONSE_ONE_OF_SCHEMAS = ["Forbidden", "InlineResponse403", "PhoneInternationalOnboardingForbidden", "UserIdMismatch"]
+
+class AddContact403Response(BaseModel):
+ """
+ AddContact403Response
+ """
+ # data type: InlineResponse403
+ oneof_schema_1_validator: Optional[InlineResponse403] = None
+ # data type: Forbidden
+ oneof_schema_2_validator: Optional[Forbidden] = None
+ # data type: UserIdMismatch
+ oneof_schema_3_validator: Optional[UserIdMismatch] = None
+ # data type: PhoneInternationalOnboardingForbidden
+ oneof_schema_4_validator: Optional[PhoneInternationalOnboardingForbidden] = None
+ actual_instance: Optional[Union[Forbidden, InlineResponse403, PhoneInternationalOnboardingForbidden, UserIdMismatch]] = None
+ one_of_schemas: Set[str] = { "Forbidden", "InlineResponse403", "PhoneInternationalOnboardingForbidden", "UserIdMismatch" }
+
+ model_config = ConfigDict(
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def __init__(self, *args, **kwargs) -> None:
+ if args:
+ if len(args) > 1:
+ raise ValueError("If a position argument is used, only 1 is allowed to set `actual_instance`")
+ if kwargs:
+ raise ValueError("If a position argument is used, keyword arguments cannot be used.")
+ super().__init__(actual_instance=args[0])
+ else:
+ super().__init__(**kwargs)
+
+ @field_validator('actual_instance')
+ def actual_instance_must_validate_oneof(cls, v):
+ instance = AddContact403Response.model_construct()
+ error_messages = []
+ match = 0
+ # validate data type: InlineResponse403
+ if not isinstance(v, InlineResponse403):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `InlineResponse403`")
+ else:
+ match += 1
+ # validate data type: Forbidden
+ if not isinstance(v, Forbidden):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `Forbidden`")
+ else:
+ match += 1
+ # validate data type: UserIdMismatch
+ if not isinstance(v, UserIdMismatch):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `UserIdMismatch`")
+ else:
+ match += 1
+ # validate data type: PhoneInternationalOnboardingForbidden
+ if not isinstance(v, PhoneInternationalOnboardingForbidden):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `PhoneInternationalOnboardingForbidden`")
+ else:
+ match += 1
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when setting `actual_instance` in AddContact403Response with oneOf schemas: Forbidden, InlineResponse403, PhoneInternationalOnboardingForbidden, UserIdMismatch. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when setting `actual_instance` in AddContact403Response with oneOf schemas: Forbidden, InlineResponse403, PhoneInternationalOnboardingForbidden, UserIdMismatch. Details: " + ", ".join(error_messages))
+ else:
+ return v
+
+ @classmethod
+ def from_dict(cls, obj: Union[str, Dict[str, Any]]) -> Self:
+ return cls.from_json(json.dumps(obj))
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Self:
+ """Returns the object represented by the json string"""
+ instance = cls.model_construct()
+ error_messages = []
+ match = 0
+
+ # deserialize data into InlineResponse403
+ try:
+ instance.actual_instance = InlineResponse403.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+ # deserialize data into Forbidden
+ try:
+ instance.actual_instance = Forbidden.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+ # deserialize data into UserIdMismatch
+ try:
+ instance.actual_instance = UserIdMismatch.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+ # deserialize data into PhoneInternationalOnboardingForbidden
+ try:
+ instance.actual_instance = PhoneInternationalOnboardingForbidden.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when deserializing the JSON string into AddContact403Response with oneOf schemas: Forbidden, InlineResponse403, PhoneInternationalOnboardingForbidden, UserIdMismatch. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when deserializing the JSON string into AddContact403Response with oneOf schemas: Forbidden, InlineResponse403, PhoneInternationalOnboardingForbidden, UserIdMismatch. Details: " + ", ".join(error_messages))
+ else:
+ return instance
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the actual instance"""
+ if self.actual_instance is None:
+ return "null"
+
+ if hasattr(self.actual_instance, "to_json") and callable(self.actual_instance.to_json):
+ return self.actual_instance.to_json()
+ else:
+ return json.dumps(self.actual_instance)
+
+ def to_dict(self) -> Optional[Union[Dict[str, Any], Forbidden, InlineResponse403, PhoneInternationalOnboardingForbidden, UserIdMismatch]]:
+ """Returns the dict representation of the actual instance"""
+ if self.actual_instance is None:
+ return None
+
+ if hasattr(self.actual_instance, "to_dict") and callable(self.actual_instance.to_dict):
+ return self.actual_instance.to_dict()
+ else:
+ # primitive type
+ return self.actual_instance
+
+ def to_str(self) -> str:
+ """Returns the string representation of the actual instance"""
+ return pprint.pformat(self.model_dump())
+
+
diff --git a/symphony/bdk/gen/federation_model/add_contact_response.py b/symphony/bdk/gen/federation_model/add_contact_response.py
new file mode 100644
index 00000000..fb09ae80
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/add_contact_response.py
@@ -0,0 +1,128 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from datetime import datetime
+from pydantic import BaseModel, ConfigDict, Field, StrictStr, field_validator
+from typing import Any, ClassVar, Dict, List, Optional
+from symphony.bdk.gen.federation_model.blocked_by_item import BlockedByItem
+from typing import Optional, Set
+from typing_extensions import Self
+
+class AddContactResponse(BaseModel):
+ """
+ AddContactResponse
+ """ # noqa: E501
+ first_name: Optional[StrictStr] = Field(default=None, alias="firstName")
+ last_name: Optional[StrictStr] = Field(default=None, alias="lastName")
+ company_name: Optional[StrictStr] = Field(default=None, alias="companyName")
+ email_address: Optional[StrictStr] = Field(default=None, alias="emailAddress")
+ phone_number: Optional[StrictStr] = Field(default=None, alias="phoneNumber")
+ external_network: Optional[StrictStr] = Field(default=None, description="External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE", alias="externalNetwork")
+ symphony_id: Optional[StrictStr] = Field(default=None, alias="symphonyId")
+ status: Optional[StrictStr] = None
+ status_update_date: Optional[datetime] = Field(default=None, alias="statusUpdateDate")
+ preferred_language: Optional[StrictStr] = Field(default=None, alias="preferredLanguage")
+ invitation_code: Optional[StrictStr] = Field(default=None, alias="invitationCode")
+ phone_number_blocked_by: Optional[List[BlockedByItem]] = Field(default=None, alias="phoneNumberBlockedBy")
+ __properties: ClassVar[List[str]] = ["firstName", "lastName", "companyName", "emailAddress", "phoneNumber", "externalNetwork", "symphonyId", "status", "statusUpdateDate", "preferredLanguage", "invitationCode", "phoneNumberBlockedBy"]
+
+ @field_validator('status')
+ def status_validate_enum(cls, value):
+ """Validates the enum"""
+ if value is None:
+ return value
+
+ if value not in set(['PENDING_CONFIRMATION', 'CONFIRMED', 'INVITE_EXPIRED', 'CANCELED', 'UNAVAILABLE', 'INCOMPLETE']):
+ raise ValueError("must be one of enum values ('PENDING_CONFIRMATION', 'CONFIRMED', 'INVITE_EXPIRED', 'CANCELED', 'UNAVAILABLE', 'INCOMPLETE')")
+ return value
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of AddContactResponse from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ # override the default output from pydantic by calling `to_dict()` of each item in phone_number_blocked_by (list)
+ _items = []
+ if self.phone_number_blocked_by:
+ for _item_phone_number_blocked_by in self.phone_number_blocked_by:
+ if _item_phone_number_blocked_by:
+ _items.append(_item_phone_number_blocked_by.to_dict())
+ _dict['phoneNumberBlockedBy'] = _items
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of AddContactResponse from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "firstName": obj.get("firstName"),
+ "lastName": obj.get("lastName"),
+ "companyName": obj.get("companyName"),
+ "emailAddress": obj.get("emailAddress"),
+ "phoneNumber": obj.get("phoneNumber"),
+ "externalNetwork": obj.get("externalNetwork"),
+ "symphonyId": obj.get("symphonyId"),
+ "status": obj.get("status"),
+ "statusUpdateDate": obj.get("statusUpdateDate"),
+ "preferredLanguage": obj.get("preferredLanguage"),
+ "invitationCode": obj.get("invitationCode"),
+ "phoneNumberBlockedBy": [BlockedByItem.from_dict(_item) for _item in obj["phoneNumberBlockedBy"]] if obj.get("phoneNumberBlockedBy") is not None else None
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/add_entitlement400_response.py b/symphony/bdk/gen/federation_model/add_entitlement400_response.py
new file mode 100644
index 00000000..a2616323
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/add_entitlement400_response.py
@@ -0,0 +1,165 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import json
+import pprint
+from pydantic import BaseModel, ConfigDict, Field, StrictStr, ValidationError, field_validator
+from typing import Any, List, Optional
+from symphony.bdk.gen.federation_model.advisor_phone_number_is_required_problem import AdvisorPhoneNumberIsRequiredProblem
+from symphony.bdk.gen.federation_model.advisor_phone_number_not_supported_problem import AdvisorPhoneNumberNotSupportedProblem
+from symphony.bdk.gen.federation_model.inline_response400 import InlineResponse400
+from symphony.bdk.gen.federation_model.pre_entitlement_permissions_not_supported_problem import PreEntitlementPermissionsNotSupportedProblem
+from pydantic import StrictStr, Field
+from typing import Union, List, Set, Optional, Dict
+from typing_extensions import Literal, Self
+
+ADDENTITLEMENT400RESPONSE_ONE_OF_SCHEMAS = ["AdvisorPhoneNumberIsRequiredProblem", "AdvisorPhoneNumberNotSupportedProblem", "InlineResponse400", "PreEntitlementPermissionsNotSupportedProblem"]
+
+class AddEntitlement400Response(BaseModel):
+ """
+ AddEntitlement400Response
+ """
+ # data type: InlineResponse400
+ oneof_schema_1_validator: Optional[InlineResponse400] = None
+ # data type: AdvisorPhoneNumberNotSupportedProblem
+ oneof_schema_2_validator: Optional[AdvisorPhoneNumberNotSupportedProblem] = None
+ # data type: AdvisorPhoneNumberIsRequiredProblem
+ oneof_schema_3_validator: Optional[AdvisorPhoneNumberIsRequiredProblem] = None
+ # data type: PreEntitlementPermissionsNotSupportedProblem
+ oneof_schema_4_validator: Optional[PreEntitlementPermissionsNotSupportedProblem] = None
+ actual_instance: Optional[Union[AdvisorPhoneNumberIsRequiredProblem, AdvisorPhoneNumberNotSupportedProblem, InlineResponse400, PreEntitlementPermissionsNotSupportedProblem]] = None
+ one_of_schemas: Set[str] = { "AdvisorPhoneNumberIsRequiredProblem", "AdvisorPhoneNumberNotSupportedProblem", "InlineResponse400", "PreEntitlementPermissionsNotSupportedProblem" }
+
+ model_config = ConfigDict(
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def __init__(self, *args, **kwargs) -> None:
+ if args:
+ if len(args) > 1:
+ raise ValueError("If a position argument is used, only 1 is allowed to set `actual_instance`")
+ if kwargs:
+ raise ValueError("If a position argument is used, keyword arguments cannot be used.")
+ super().__init__(actual_instance=args[0])
+ else:
+ super().__init__(**kwargs)
+
+ @field_validator('actual_instance')
+ def actual_instance_must_validate_oneof(cls, v):
+ instance = AddEntitlement400Response.model_construct()
+ error_messages = []
+ match = 0
+ # validate data type: InlineResponse400
+ if not isinstance(v, InlineResponse400):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `InlineResponse400`")
+ else:
+ match += 1
+ # validate data type: AdvisorPhoneNumberNotSupportedProblem
+ if not isinstance(v, AdvisorPhoneNumberNotSupportedProblem):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `AdvisorPhoneNumberNotSupportedProblem`")
+ else:
+ match += 1
+ # validate data type: AdvisorPhoneNumberIsRequiredProblem
+ if not isinstance(v, AdvisorPhoneNumberIsRequiredProblem):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `AdvisorPhoneNumberIsRequiredProblem`")
+ else:
+ match += 1
+ # validate data type: PreEntitlementPermissionsNotSupportedProblem
+ if not isinstance(v, PreEntitlementPermissionsNotSupportedProblem):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `PreEntitlementPermissionsNotSupportedProblem`")
+ else:
+ match += 1
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when setting `actual_instance` in AddEntitlement400Response with oneOf schemas: AdvisorPhoneNumberIsRequiredProblem, AdvisorPhoneNumberNotSupportedProblem, InlineResponse400, PreEntitlementPermissionsNotSupportedProblem. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when setting `actual_instance` in AddEntitlement400Response with oneOf schemas: AdvisorPhoneNumberIsRequiredProblem, AdvisorPhoneNumberNotSupportedProblem, InlineResponse400, PreEntitlementPermissionsNotSupportedProblem. Details: " + ", ".join(error_messages))
+ else:
+ return v
+
+ @classmethod
+ def from_dict(cls, obj: Union[str, Dict[str, Any]]) -> Self:
+ return cls.from_json(json.dumps(obj))
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Self:
+ """Returns the object represented by the json string"""
+ instance = cls.model_construct()
+ error_messages = []
+ match = 0
+
+ # deserialize data into InlineResponse400
+ try:
+ instance.actual_instance = InlineResponse400.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+ # deserialize data into AdvisorPhoneNumberNotSupportedProblem
+ try:
+ instance.actual_instance = AdvisorPhoneNumberNotSupportedProblem.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+ # deserialize data into AdvisorPhoneNumberIsRequiredProblem
+ try:
+ instance.actual_instance = AdvisorPhoneNumberIsRequiredProblem.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+ # deserialize data into PreEntitlementPermissionsNotSupportedProblem
+ try:
+ instance.actual_instance = PreEntitlementPermissionsNotSupportedProblem.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when deserializing the JSON string into AddEntitlement400Response with oneOf schemas: AdvisorPhoneNumberIsRequiredProblem, AdvisorPhoneNumberNotSupportedProblem, InlineResponse400, PreEntitlementPermissionsNotSupportedProblem. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when deserializing the JSON string into AddEntitlement400Response with oneOf schemas: AdvisorPhoneNumberIsRequiredProblem, AdvisorPhoneNumberNotSupportedProblem, InlineResponse400, PreEntitlementPermissionsNotSupportedProblem. Details: " + ", ".join(error_messages))
+ else:
+ return instance
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the actual instance"""
+ if self.actual_instance is None:
+ return "null"
+
+ if hasattr(self.actual_instance, "to_json") and callable(self.actual_instance.to_json):
+ return self.actual_instance.to_json()
+ else:
+ return json.dumps(self.actual_instance)
+
+ def to_dict(self) -> Optional[Union[Dict[str, Any], AdvisorPhoneNumberIsRequiredProblem, AdvisorPhoneNumberNotSupportedProblem, InlineResponse400, PreEntitlementPermissionsNotSupportedProblem]]:
+ """Returns the dict representation of the actual instance"""
+ if self.actual_instance is None:
+ return None
+
+ if hasattr(self.actual_instance, "to_dict") and callable(self.actual_instance.to_dict):
+ return self.actual_instance.to_dict()
+ else:
+ # primitive type
+ return self.actual_instance
+
+ def to_str(self) -> str:
+ """Returns the string representation of the actual instance"""
+ return pprint.pformat(self.model_dump())
+
+
diff --git a/symphony/bdk/gen/federation_model/add_entitlement409_response.py b/symphony/bdk/gen/federation_model/add_entitlement409_response.py
new file mode 100644
index 00000000..27307d0a
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/add_entitlement409_response.py
@@ -0,0 +1,165 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import json
+import pprint
+from pydantic import BaseModel, ConfigDict, Field, StrictStr, ValidationError, field_validator
+from typing import Any, List, Optional
+from symphony.bdk.gen.federation_model.advisor_phone_number_already_used_problem import AdvisorPhoneNumberAlreadyUsedProblem
+from symphony.bdk.gen.federation_model.number_not_available import NumberNotAvailable
+from symphony.bdk.gen.federation_model.number_registration_not_possible import NumberRegistrationNotPossible
+from symphony.bdk.gen.federation_model.pre_entitlement_phone_number_mismatch import PreEntitlementPhoneNumberMismatch
+from pydantic import StrictStr, Field
+from typing import Union, List, Set, Optional, Dict
+from typing_extensions import Literal, Self
+
+ADDENTITLEMENT409RESPONSE_ONE_OF_SCHEMAS = ["AdvisorPhoneNumberAlreadyUsedProblem", "NumberNotAvailable", "NumberRegistrationNotPossible", "PreEntitlementPhoneNumberMismatch"]
+
+class AddEntitlement409Response(BaseModel):
+ """
+ AddEntitlement409Response
+ """
+ # data type: AdvisorPhoneNumberAlreadyUsedProblem
+ oneof_schema_1_validator: Optional[AdvisorPhoneNumberAlreadyUsedProblem] = None
+ # data type: PreEntitlementPhoneNumberMismatch
+ oneof_schema_2_validator: Optional[PreEntitlementPhoneNumberMismatch] = None
+ # data type: NumberNotAvailable
+ oneof_schema_3_validator: Optional[NumberNotAvailable] = None
+ # data type: NumberRegistrationNotPossible
+ oneof_schema_4_validator: Optional[NumberRegistrationNotPossible] = None
+ actual_instance: Optional[Union[AdvisorPhoneNumberAlreadyUsedProblem, NumberNotAvailable, NumberRegistrationNotPossible, PreEntitlementPhoneNumberMismatch]] = None
+ one_of_schemas: Set[str] = { "AdvisorPhoneNumberAlreadyUsedProblem", "NumberNotAvailable", "NumberRegistrationNotPossible", "PreEntitlementPhoneNumberMismatch" }
+
+ model_config = ConfigDict(
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def __init__(self, *args, **kwargs) -> None:
+ if args:
+ if len(args) > 1:
+ raise ValueError("If a position argument is used, only 1 is allowed to set `actual_instance`")
+ if kwargs:
+ raise ValueError("If a position argument is used, keyword arguments cannot be used.")
+ super().__init__(actual_instance=args[0])
+ else:
+ super().__init__(**kwargs)
+
+ @field_validator('actual_instance')
+ def actual_instance_must_validate_oneof(cls, v):
+ instance = AddEntitlement409Response.model_construct()
+ error_messages = []
+ match = 0
+ # validate data type: AdvisorPhoneNumberAlreadyUsedProblem
+ if not isinstance(v, AdvisorPhoneNumberAlreadyUsedProblem):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `AdvisorPhoneNumberAlreadyUsedProblem`")
+ else:
+ match += 1
+ # validate data type: PreEntitlementPhoneNumberMismatch
+ if not isinstance(v, PreEntitlementPhoneNumberMismatch):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `PreEntitlementPhoneNumberMismatch`")
+ else:
+ match += 1
+ # validate data type: NumberNotAvailable
+ if not isinstance(v, NumberNotAvailable):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `NumberNotAvailable`")
+ else:
+ match += 1
+ # validate data type: NumberRegistrationNotPossible
+ if not isinstance(v, NumberRegistrationNotPossible):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `NumberRegistrationNotPossible`")
+ else:
+ match += 1
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when setting `actual_instance` in AddEntitlement409Response with oneOf schemas: AdvisorPhoneNumberAlreadyUsedProblem, NumberNotAvailable, NumberRegistrationNotPossible, PreEntitlementPhoneNumberMismatch. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when setting `actual_instance` in AddEntitlement409Response with oneOf schemas: AdvisorPhoneNumberAlreadyUsedProblem, NumberNotAvailable, NumberRegistrationNotPossible, PreEntitlementPhoneNumberMismatch. Details: " + ", ".join(error_messages))
+ else:
+ return v
+
+ @classmethod
+ def from_dict(cls, obj: Union[str, Dict[str, Any]]) -> Self:
+ return cls.from_json(json.dumps(obj))
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Self:
+ """Returns the object represented by the json string"""
+ instance = cls.model_construct()
+ error_messages = []
+ match = 0
+
+ # deserialize data into AdvisorPhoneNumberAlreadyUsedProblem
+ try:
+ instance.actual_instance = AdvisorPhoneNumberAlreadyUsedProblem.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+ # deserialize data into PreEntitlementPhoneNumberMismatch
+ try:
+ instance.actual_instance = PreEntitlementPhoneNumberMismatch.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+ # deserialize data into NumberNotAvailable
+ try:
+ instance.actual_instance = NumberNotAvailable.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+ # deserialize data into NumberRegistrationNotPossible
+ try:
+ instance.actual_instance = NumberRegistrationNotPossible.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when deserializing the JSON string into AddEntitlement409Response with oneOf schemas: AdvisorPhoneNumberAlreadyUsedProblem, NumberNotAvailable, NumberRegistrationNotPossible, PreEntitlementPhoneNumberMismatch. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when deserializing the JSON string into AddEntitlement409Response with oneOf schemas: AdvisorPhoneNumberAlreadyUsedProblem, NumberNotAvailable, NumberRegistrationNotPossible, PreEntitlementPhoneNumberMismatch. Details: " + ", ".join(error_messages))
+ else:
+ return instance
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the actual instance"""
+ if self.actual_instance is None:
+ return "null"
+
+ if hasattr(self.actual_instance, "to_json") and callable(self.actual_instance.to_json):
+ return self.actual_instance.to_json()
+ else:
+ return json.dumps(self.actual_instance)
+
+ def to_dict(self) -> Optional[Union[Dict[str, Any], AdvisorPhoneNumberAlreadyUsedProblem, NumberNotAvailable, NumberRegistrationNotPossible, PreEntitlementPhoneNumberMismatch]]:
+ """Returns the dict representation of the actual instance"""
+ if self.actual_instance is None:
+ return None
+
+ if hasattr(self.actual_instance, "to_dict") and callable(self.actual_instance.to_dict):
+ return self.actual_instance.to_dict()
+ else:
+ # primitive type
+ return self.actual_instance
+
+ def to_str(self) -> str:
+ """Returns the string representation of the actual instance"""
+ return pprint.pformat(self.model_dump())
+
+
diff --git a/symphony/bdk/gen/federation_model/add_entitlementv2_response.py b/symphony/bdk/gen/federation_model/add_entitlementv2_response.py
new file mode 100644
index 00000000..d97abf45
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/add_entitlementv2_response.py
@@ -0,0 +1,133 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, Field, StrictStr, field_validator
+from typing import Any, ClassVar, Dict, List, Optional
+from symphony.bdk.gen.federation_model.bulk_permission_item import BulkPermissionItem
+from symphony.bdk.gen.federation_model.phone import Phone
+from typing import Optional, Set
+from typing_extensions import Self
+
+class AddEntitlementv2Response(BaseModel):
+ """
+ AddEntitlementv2Response
+ """ # noqa: E501
+ symphony_id: Optional[StrictStr] = Field(default=None, alias="symphonyId")
+ first_name: Optional[StrictStr] = Field(default=None, alias="firstName")
+ last_name: Optional[StrictStr] = Field(default=None, alias="lastName")
+ company_name: Optional[StrictStr] = Field(default=None, alias="companyName")
+ display_name: Optional[StrictStr] = Field(default=None, alias="displayName")
+ email_address: Optional[StrictStr] = Field(default=None, alias="emailAddress")
+ avatar: Optional[StrictStr] = None
+ external_network: Optional[StrictStr] = Field(default=None, alias="externalNetwork")
+ permissions: Optional[List[BulkPermissionItem]] = None
+ federation_group_id: Optional[StrictStr] = Field(default=None, alias="federationGroupId")
+ own_contact_id: Optional[StrictStr] = Field(default=None, alias="ownContactId")
+ status: Optional[StrictStr] = None
+ phone: Optional[Phone] = None
+ __properties: ClassVar[List[str]] = ["symphonyId", "firstName", "lastName", "companyName", "displayName", "emailAddress", "avatar", "externalNetwork", "permissions", "federationGroupId", "ownContactId", "status", "phone"]
+
+ @field_validator('status')
+ def status_validate_enum(cls, value):
+ """Validates the enum"""
+ if value is None:
+ return value
+
+ if value not in set(['PRE_ENTITLED', 'ENTITLED']):
+ raise ValueError("must be one of enum values ('PRE_ENTITLED', 'ENTITLED')")
+ return value
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of AddEntitlementv2Response from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ # override the default output from pydantic by calling `to_dict()` of each item in permissions (list)
+ _items = []
+ if self.permissions:
+ for _item_permissions in self.permissions:
+ if _item_permissions:
+ _items.append(_item_permissions.to_dict())
+ _dict['permissions'] = _items
+ # override the default output from pydantic by calling `to_dict()` of phone
+ if self.phone:
+ _dict['phone'] = self.phone.to_dict()
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of AddEntitlementv2Response from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "symphonyId": obj.get("symphonyId"),
+ "firstName": obj.get("firstName"),
+ "lastName": obj.get("lastName"),
+ "companyName": obj.get("companyName"),
+ "displayName": obj.get("displayName"),
+ "emailAddress": obj.get("emailAddress"),
+ "avatar": obj.get("avatar"),
+ "externalNetwork": obj.get("externalNetwork"),
+ "permissions": [BulkPermissionItem.from_dict(_item) for _item in obj["permissions"]] if obj.get("permissions") is not None else None,
+ "federationGroupId": obj.get("federationGroupId"),
+ "ownContactId": obj.get("ownContactId"),
+ "status": obj.get("status"),
+ "phone": Phone.from_dict(obj["phone"]) if obj.get("phone") is not None else None
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/add_pre_entitlement400_response.py b/symphony/bdk/gen/federation_model/add_pre_entitlement400_response.py
new file mode 100644
index 00000000..abcb363d
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/add_pre_entitlement400_response.py
@@ -0,0 +1,151 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import json
+import pprint
+from pydantic import BaseModel, ConfigDict, Field, StrictStr, ValidationError, field_validator
+from typing import Any, List, Optional
+from symphony.bdk.gen.federation_model.entitlement_type_not_found_problem import EntitlementTypeNotFoundProblem
+from symphony.bdk.gen.federation_model.phone_number_pre_allocation_not_supported_problem import PhoneNumberPreAllocationNotSupportedProblem
+from symphony.bdk.gen.federation_model.symphony_user_not_found_problem import SymphonyUserNotFoundProblem
+from pydantic import StrictStr, Field
+from typing import Union, List, Set, Optional, Dict
+from typing_extensions import Literal, Self
+
+ADDPREENTITLEMENT400RESPONSE_ONE_OF_SCHEMAS = ["EntitlementTypeNotFoundProblem", "PhoneNumberPreAllocationNotSupportedProblem", "SymphonyUserNotFoundProblem"]
+
+class AddPreEntitlement400Response(BaseModel):
+ """
+ AddPreEntitlement400Response
+ """
+ # data type: SymphonyUserNotFoundProblem
+ oneof_schema_1_validator: Optional[SymphonyUserNotFoundProblem] = None
+ # data type: EntitlementTypeNotFoundProblem
+ oneof_schema_2_validator: Optional[EntitlementTypeNotFoundProblem] = None
+ # data type: PhoneNumberPreAllocationNotSupportedProblem
+ oneof_schema_3_validator: Optional[PhoneNumberPreAllocationNotSupportedProblem] = None
+ actual_instance: Optional[Union[EntitlementTypeNotFoundProblem, PhoneNumberPreAllocationNotSupportedProblem, SymphonyUserNotFoundProblem]] = None
+ one_of_schemas: Set[str] = { "EntitlementTypeNotFoundProblem", "PhoneNumberPreAllocationNotSupportedProblem", "SymphonyUserNotFoundProblem" }
+
+ model_config = ConfigDict(
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def __init__(self, *args, **kwargs) -> None:
+ if args:
+ if len(args) > 1:
+ raise ValueError("If a position argument is used, only 1 is allowed to set `actual_instance`")
+ if kwargs:
+ raise ValueError("If a position argument is used, keyword arguments cannot be used.")
+ super().__init__(actual_instance=args[0])
+ else:
+ super().__init__(**kwargs)
+
+ @field_validator('actual_instance')
+ def actual_instance_must_validate_oneof(cls, v):
+ instance = AddPreEntitlement400Response.model_construct()
+ error_messages = []
+ match = 0
+ # validate data type: SymphonyUserNotFoundProblem
+ if not isinstance(v, SymphonyUserNotFoundProblem):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `SymphonyUserNotFoundProblem`")
+ else:
+ match += 1
+ # validate data type: EntitlementTypeNotFoundProblem
+ if not isinstance(v, EntitlementTypeNotFoundProblem):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `EntitlementTypeNotFoundProblem`")
+ else:
+ match += 1
+ # validate data type: PhoneNumberPreAllocationNotSupportedProblem
+ if not isinstance(v, PhoneNumberPreAllocationNotSupportedProblem):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `PhoneNumberPreAllocationNotSupportedProblem`")
+ else:
+ match += 1
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when setting `actual_instance` in AddPreEntitlement400Response with oneOf schemas: EntitlementTypeNotFoundProblem, PhoneNumberPreAllocationNotSupportedProblem, SymphonyUserNotFoundProblem. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when setting `actual_instance` in AddPreEntitlement400Response with oneOf schemas: EntitlementTypeNotFoundProblem, PhoneNumberPreAllocationNotSupportedProblem, SymphonyUserNotFoundProblem. Details: " + ", ".join(error_messages))
+ else:
+ return v
+
+ @classmethod
+ def from_dict(cls, obj: Union[str, Dict[str, Any]]) -> Self:
+ return cls.from_json(json.dumps(obj))
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Self:
+ """Returns the object represented by the json string"""
+ instance = cls.model_construct()
+ error_messages = []
+ match = 0
+
+ # deserialize data into SymphonyUserNotFoundProblem
+ try:
+ instance.actual_instance = SymphonyUserNotFoundProblem.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+ # deserialize data into EntitlementTypeNotFoundProblem
+ try:
+ instance.actual_instance = EntitlementTypeNotFoundProblem.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+ # deserialize data into PhoneNumberPreAllocationNotSupportedProblem
+ try:
+ instance.actual_instance = PhoneNumberPreAllocationNotSupportedProblem.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when deserializing the JSON string into AddPreEntitlement400Response with oneOf schemas: EntitlementTypeNotFoundProblem, PhoneNumberPreAllocationNotSupportedProblem, SymphonyUserNotFoundProblem. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when deserializing the JSON string into AddPreEntitlement400Response with oneOf schemas: EntitlementTypeNotFoundProblem, PhoneNumberPreAllocationNotSupportedProblem, SymphonyUserNotFoundProblem. Details: " + ", ".join(error_messages))
+ else:
+ return instance
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the actual instance"""
+ if self.actual_instance is None:
+ return "null"
+
+ if hasattr(self.actual_instance, "to_json") and callable(self.actual_instance.to_json):
+ return self.actual_instance.to_json()
+ else:
+ return json.dumps(self.actual_instance)
+
+ def to_dict(self) -> Optional[Union[Dict[str, Any], EntitlementTypeNotFoundProblem, PhoneNumberPreAllocationNotSupportedProblem, SymphonyUserNotFoundProblem]]:
+ """Returns the dict representation of the actual instance"""
+ if self.actual_instance is None:
+ return None
+
+ if hasattr(self.actual_instance, "to_dict") and callable(self.actual_instance.to_dict):
+ return self.actual_instance.to_dict()
+ else:
+ # primitive type
+ return self.actual_instance
+
+ def to_str(self) -> str:
+ """Returns the string representation of the actual instance"""
+ return pprint.pformat(self.model_dump())
+
+
diff --git a/symphony/bdk/gen/federation_model/add_pre_entitlement409_response.py b/symphony/bdk/gen/federation_model/add_pre_entitlement409_response.py
new file mode 100644
index 00000000..e9d0bf47
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/add_pre_entitlement409_response.py
@@ -0,0 +1,137 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import json
+import pprint
+from pydantic import BaseModel, ConfigDict, Field, StrictStr, ValidationError, field_validator
+from typing import Any, List, Optional
+from symphony.bdk.gen.federation_model.advisor_already_has_phone_allocated_problem import AdvisorAlreadyHasPhoneAllocatedProblem
+from symphony.bdk.gen.federation_model.phone_number_already_allocated_problem import PhoneNumberAlreadyAllocatedProblem
+from pydantic import StrictStr, Field
+from typing import Union, List, Set, Optional, Dict
+from typing_extensions import Literal, Self
+
+ADDPREENTITLEMENT409RESPONSE_ONE_OF_SCHEMAS = ["AdvisorAlreadyHasPhoneAllocatedProblem", "PhoneNumberAlreadyAllocatedProblem"]
+
+class AddPreEntitlement409Response(BaseModel):
+ """
+ AddPreEntitlement409Response
+ """
+ # data type: AdvisorAlreadyHasPhoneAllocatedProblem
+ oneof_schema_1_validator: Optional[AdvisorAlreadyHasPhoneAllocatedProblem] = None
+ # data type: PhoneNumberAlreadyAllocatedProblem
+ oneof_schema_2_validator: Optional[PhoneNumberAlreadyAllocatedProblem] = None
+ actual_instance: Optional[Union[AdvisorAlreadyHasPhoneAllocatedProblem, PhoneNumberAlreadyAllocatedProblem]] = None
+ one_of_schemas: Set[str] = { "AdvisorAlreadyHasPhoneAllocatedProblem", "PhoneNumberAlreadyAllocatedProblem" }
+
+ model_config = ConfigDict(
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def __init__(self, *args, **kwargs) -> None:
+ if args:
+ if len(args) > 1:
+ raise ValueError("If a position argument is used, only 1 is allowed to set `actual_instance`")
+ if kwargs:
+ raise ValueError("If a position argument is used, keyword arguments cannot be used.")
+ super().__init__(actual_instance=args[0])
+ else:
+ super().__init__(**kwargs)
+
+ @field_validator('actual_instance')
+ def actual_instance_must_validate_oneof(cls, v):
+ instance = AddPreEntitlement409Response.model_construct()
+ error_messages = []
+ match = 0
+ # validate data type: AdvisorAlreadyHasPhoneAllocatedProblem
+ if not isinstance(v, AdvisorAlreadyHasPhoneAllocatedProblem):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `AdvisorAlreadyHasPhoneAllocatedProblem`")
+ else:
+ match += 1
+ # validate data type: PhoneNumberAlreadyAllocatedProblem
+ if not isinstance(v, PhoneNumberAlreadyAllocatedProblem):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `PhoneNumberAlreadyAllocatedProblem`")
+ else:
+ match += 1
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when setting `actual_instance` in AddPreEntitlement409Response with oneOf schemas: AdvisorAlreadyHasPhoneAllocatedProblem, PhoneNumberAlreadyAllocatedProblem. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when setting `actual_instance` in AddPreEntitlement409Response with oneOf schemas: AdvisorAlreadyHasPhoneAllocatedProblem, PhoneNumberAlreadyAllocatedProblem. Details: " + ", ".join(error_messages))
+ else:
+ return v
+
+ @classmethod
+ def from_dict(cls, obj: Union[str, Dict[str, Any]]) -> Self:
+ return cls.from_json(json.dumps(obj))
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Self:
+ """Returns the object represented by the json string"""
+ instance = cls.model_construct()
+ error_messages = []
+ match = 0
+
+ # deserialize data into AdvisorAlreadyHasPhoneAllocatedProblem
+ try:
+ instance.actual_instance = AdvisorAlreadyHasPhoneAllocatedProblem.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+ # deserialize data into PhoneNumberAlreadyAllocatedProblem
+ try:
+ instance.actual_instance = PhoneNumberAlreadyAllocatedProblem.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when deserializing the JSON string into AddPreEntitlement409Response with oneOf schemas: AdvisorAlreadyHasPhoneAllocatedProblem, PhoneNumberAlreadyAllocatedProblem. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when deserializing the JSON string into AddPreEntitlement409Response with oneOf schemas: AdvisorAlreadyHasPhoneAllocatedProblem, PhoneNumberAlreadyAllocatedProblem. Details: " + ", ".join(error_messages))
+ else:
+ return instance
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the actual instance"""
+ if self.actual_instance is None:
+ return "null"
+
+ if hasattr(self.actual_instance, "to_json") and callable(self.actual_instance.to_json):
+ return self.actual_instance.to_json()
+ else:
+ return json.dumps(self.actual_instance)
+
+ def to_dict(self) -> Optional[Union[Dict[str, Any], AdvisorAlreadyHasPhoneAllocatedProblem, PhoneNumberAlreadyAllocatedProblem]]:
+ """Returns the dict representation of the actual instance"""
+ if self.actual_instance is None:
+ return None
+
+ if hasattr(self.actual_instance, "to_dict") and callable(self.actual_instance.to_dict):
+ return self.actual_instance.to_dict()
+ else:
+ # primitive type
+ return self.actual_instance
+
+ def to_str(self) -> str:
+ """Returns the string representation of the actual instance"""
+ return pprint.pformat(self.model_dump())
+
+
diff --git a/symphony/bdk/gen/federation_model/add_room_member_conflicted.py b/symphony/bdk/gen/federation_model/add_room_member_conflicted.py
new file mode 100644
index 00000000..3aaaf51e
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/add_room_member_conflicted.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class AddRoomMemberConflicted(BaseModel):
+ """
+ Gateway microservice cannot create/add the member in the room.
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of AddRoomMemberConflicted from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of AddRoomMemberConflicted from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/add_room_member_failed.py b/symphony/bdk/gen/federation_model/add_room_member_failed.py
new file mode 100644
index 00000000..a6db9542
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/add_room_member_failed.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class AddRoomMemberFailed(BaseModel):
+ """
+ Gateway microservice cannot create/add the member to room.
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of AddRoomMemberFailed from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of AddRoomMemberFailed from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/add_room_member_multi_roomv2403_response.py b/symphony/bdk/gen/federation_model/add_room_member_multi_roomv2403_response.py
new file mode 100644
index 00000000..e17a26f6
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/add_room_member_multi_roomv2403_response.py
@@ -0,0 +1,137 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import json
+import pprint
+from pydantic import BaseModel, ConfigDict, Field, StrictStr, ValidationError, field_validator
+from typing import Any, List, Optional
+from symphony.bdk.gen.federation_model.forbidden import Forbidden
+from symphony.bdk.gen.federation_model.inline_response4032 import InlineResponse4032
+from pydantic import StrictStr, Field
+from typing import Union, List, Set, Optional, Dict
+from typing_extensions import Literal, Self
+
+ADDROOMMEMBERMULTIROOMV2403RESPONSE_ONE_OF_SCHEMAS = ["Forbidden", "InlineResponse4032"]
+
+class AddRoomMemberMultiRoomv2403Response(BaseModel):
+ """
+ AddRoomMemberMultiRoomv2403Response
+ """
+ # data type: InlineResponse4032
+ oneof_schema_1_validator: Optional[InlineResponse4032] = None
+ # data type: Forbidden
+ oneof_schema_2_validator: Optional[Forbidden] = None
+ actual_instance: Optional[Union[Forbidden, InlineResponse4032]] = None
+ one_of_schemas: Set[str] = { "Forbidden", "InlineResponse4032" }
+
+ model_config = ConfigDict(
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def __init__(self, *args, **kwargs) -> None:
+ if args:
+ if len(args) > 1:
+ raise ValueError("If a position argument is used, only 1 is allowed to set `actual_instance`")
+ if kwargs:
+ raise ValueError("If a position argument is used, keyword arguments cannot be used.")
+ super().__init__(actual_instance=args[0])
+ else:
+ super().__init__(**kwargs)
+
+ @field_validator('actual_instance')
+ def actual_instance_must_validate_oneof(cls, v):
+ instance = AddRoomMemberMultiRoomv2403Response.model_construct()
+ error_messages = []
+ match = 0
+ # validate data type: InlineResponse4032
+ if not isinstance(v, InlineResponse4032):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `InlineResponse4032`")
+ else:
+ match += 1
+ # validate data type: Forbidden
+ if not isinstance(v, Forbidden):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `Forbidden`")
+ else:
+ match += 1
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when setting `actual_instance` in AddRoomMemberMultiRoomv2403Response with oneOf schemas: Forbidden, InlineResponse4032. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when setting `actual_instance` in AddRoomMemberMultiRoomv2403Response with oneOf schemas: Forbidden, InlineResponse4032. Details: " + ", ".join(error_messages))
+ else:
+ return v
+
+ @classmethod
+ def from_dict(cls, obj: Union[str, Dict[str, Any]]) -> Self:
+ return cls.from_json(json.dumps(obj))
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Self:
+ """Returns the object represented by the json string"""
+ instance = cls.model_construct()
+ error_messages = []
+ match = 0
+
+ # deserialize data into InlineResponse4032
+ try:
+ instance.actual_instance = InlineResponse4032.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+ # deserialize data into Forbidden
+ try:
+ instance.actual_instance = Forbidden.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when deserializing the JSON string into AddRoomMemberMultiRoomv2403Response with oneOf schemas: Forbidden, InlineResponse4032. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when deserializing the JSON string into AddRoomMemberMultiRoomv2403Response with oneOf schemas: Forbidden, InlineResponse4032. Details: " + ", ".join(error_messages))
+ else:
+ return instance
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the actual instance"""
+ if self.actual_instance is None:
+ return "null"
+
+ if hasattr(self.actual_instance, "to_json") and callable(self.actual_instance.to_json):
+ return self.actual_instance.to_json()
+ else:
+ return json.dumps(self.actual_instance)
+
+ def to_dict(self) -> Optional[Union[Dict[str, Any], Forbidden, InlineResponse4032]]:
+ """Returns the dict representation of the actual instance"""
+ if self.actual_instance is None:
+ return None
+
+ if hasattr(self.actual_instance, "to_dict") and callable(self.actual_instance.to_dict):
+ return self.actual_instance.to_dict()
+ else:
+ # primitive type
+ return self.actual_instance
+
+ def to_str(self) -> str:
+ """Returns the string representation of the actual instance"""
+ return pprint.pformat(self.model_dump())
+
+
diff --git a/symphony/bdk/gen/federation_model/add_room_member_multi_roomv2409_response.py b/symphony/bdk/gen/federation_model/add_room_member_multi_roomv2409_response.py
new file mode 100644
index 00000000..70ecc4e9
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/add_room_member_multi_roomv2409_response.py
@@ -0,0 +1,137 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import json
+import pprint
+from pydantic import BaseModel, ConfigDict, Field, StrictStr, ValidationError, field_validator
+from typing import Any, List, Optional
+from symphony.bdk.gen.federation_model.add_room_member_conflicted import AddRoomMemberConflicted
+from symphony.bdk.gen.federation_model.room_is_deactivated import RoomIsDeactivated
+from pydantic import StrictStr, Field
+from typing import Union, List, Set, Optional, Dict
+from typing_extensions import Literal, Self
+
+ADDROOMMEMBERMULTIROOMV2409RESPONSE_ONE_OF_SCHEMAS = ["AddRoomMemberConflicted", "RoomIsDeactivated"]
+
+class AddRoomMemberMultiRoomv2409Response(BaseModel):
+ """
+ AddRoomMemberMultiRoomv2409Response
+ """
+ # data type: RoomIsDeactivated
+ oneof_schema_1_validator: Optional[RoomIsDeactivated] = None
+ # data type: AddRoomMemberConflicted
+ oneof_schema_2_validator: Optional[AddRoomMemberConflicted] = None
+ actual_instance: Optional[Union[AddRoomMemberConflicted, RoomIsDeactivated]] = None
+ one_of_schemas: Set[str] = { "AddRoomMemberConflicted", "RoomIsDeactivated" }
+
+ model_config = ConfigDict(
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def __init__(self, *args, **kwargs) -> None:
+ if args:
+ if len(args) > 1:
+ raise ValueError("If a position argument is used, only 1 is allowed to set `actual_instance`")
+ if kwargs:
+ raise ValueError("If a position argument is used, keyword arguments cannot be used.")
+ super().__init__(actual_instance=args[0])
+ else:
+ super().__init__(**kwargs)
+
+ @field_validator('actual_instance')
+ def actual_instance_must_validate_oneof(cls, v):
+ instance = AddRoomMemberMultiRoomv2409Response.model_construct()
+ error_messages = []
+ match = 0
+ # validate data type: RoomIsDeactivated
+ if not isinstance(v, RoomIsDeactivated):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `RoomIsDeactivated`")
+ else:
+ match += 1
+ # validate data type: AddRoomMemberConflicted
+ if not isinstance(v, AddRoomMemberConflicted):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `AddRoomMemberConflicted`")
+ else:
+ match += 1
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when setting `actual_instance` in AddRoomMemberMultiRoomv2409Response with oneOf schemas: AddRoomMemberConflicted, RoomIsDeactivated. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when setting `actual_instance` in AddRoomMemberMultiRoomv2409Response with oneOf schemas: AddRoomMemberConflicted, RoomIsDeactivated. Details: " + ", ".join(error_messages))
+ else:
+ return v
+
+ @classmethod
+ def from_dict(cls, obj: Union[str, Dict[str, Any]]) -> Self:
+ return cls.from_json(json.dumps(obj))
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Self:
+ """Returns the object represented by the json string"""
+ instance = cls.model_construct()
+ error_messages = []
+ match = 0
+
+ # deserialize data into RoomIsDeactivated
+ try:
+ instance.actual_instance = RoomIsDeactivated.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+ # deserialize data into AddRoomMemberConflicted
+ try:
+ instance.actual_instance = AddRoomMemberConflicted.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when deserializing the JSON string into AddRoomMemberMultiRoomv2409Response with oneOf schemas: AddRoomMemberConflicted, RoomIsDeactivated. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when deserializing the JSON string into AddRoomMemberMultiRoomv2409Response with oneOf schemas: AddRoomMemberConflicted, RoomIsDeactivated. Details: " + ", ".join(error_messages))
+ else:
+ return instance
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the actual instance"""
+ if self.actual_instance is None:
+ return "null"
+
+ if hasattr(self.actual_instance, "to_json") and callable(self.actual_instance.to_json):
+ return self.actual_instance.to_json()
+ else:
+ return json.dumps(self.actual_instance)
+
+ def to_dict(self) -> Optional[Union[Dict[str, Any], AddRoomMemberConflicted, RoomIsDeactivated]]:
+ """Returns the dict representation of the actual instance"""
+ if self.actual_instance is None:
+ return None
+
+ if hasattr(self.actual_instance, "to_dict") and callable(self.actual_instance.to_dict):
+ return self.actual_instance.to_dict()
+ else:
+ # primitive type
+ return self.actual_instance
+
+ def to_str(self) -> str:
+ """Returns the string representation of the actual instance"""
+ return pprint.pformat(self.model_dump())
+
+
diff --git a/symphony/bdk/gen/federation_model/address_already_empty.py b/symphony/bdk/gen/federation_model/address_already_empty.py
new file mode 100644
index 00000000..81b22ca5
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/address_already_empty.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class AddressAlreadyEmpty(BaseModel):
+ """
+ Address already empty
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of AddressAlreadyEmpty from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of AddressAlreadyEmpty from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/address_request.py b/symphony/bdk/gen/federation_model/address_request.py
new file mode 100644
index 00000000..7f209741
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/address_request.py
@@ -0,0 +1,99 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, Field, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class AddressRequest(BaseModel):
+ """
+ AddressRequest
+ """ # noqa: E501
+ var_property: Optional[StrictStr] = Field(default=None, alias="property")
+ line1: Optional[StrictStr] = None
+ line2: Optional[StrictStr] = None
+ city: Optional[StrictStr] = None
+ state: Optional[StrictStr] = None
+ zip: Optional[StrictStr] = None
+ zip_plus_four: Optional[StrictStr] = Field(default=None, alias="zipPlusFour")
+ __properties: ClassVar[List[str]] = ["property", "line1", "line2", "city", "state", "zip", "zipPlusFour"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of AddressRequest from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of AddressRequest from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "property": obj.get("property"),
+ "line1": obj.get("line1"),
+ "line2": obj.get("line2"),
+ "city": obj.get("city"),
+ "state": obj.get("state"),
+ "zip": obj.get("zip"),
+ "zipPlusFour": obj.get("zipPlusFour")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/address_response.py b/symphony/bdk/gen/federation_model/address_response.py
new file mode 100644
index 00000000..4323474a
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/address_response.py
@@ -0,0 +1,99 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, Field, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class AddressResponse(BaseModel):
+ """
+ AddressResponse
+ """ # noqa: E501
+ var_property: Optional[StrictStr] = Field(default=None, alias="property")
+ line1: Optional[StrictStr] = None
+ line2: Optional[StrictStr] = None
+ city: Optional[StrictStr] = None
+ state: Optional[StrictStr] = None
+ zip: Optional[StrictStr] = None
+ zip_plus_four: Optional[StrictStr] = Field(default=None, alias="zipPlusFour")
+ __properties: ClassVar[List[str]] = ["property", "line1", "line2", "city", "state", "zip", "zipPlusFour"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of AddressResponse from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of AddressResponse from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "property": obj.get("property"),
+ "line1": obj.get("line1"),
+ "line2": obj.get("line2"),
+ "city": obj.get("city"),
+ "state": obj.get("state"),
+ "zip": obj.get("zip"),
+ "zipPlusFour": obj.get("zipPlusFour")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/advisor_already_entitled.py b/symphony/bdk/gen/federation_model/advisor_already_entitled.py
new file mode 100644
index 00000000..ae1356f0
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/advisor_already_entitled.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class AdvisorAlreadyEntitled(BaseModel):
+ """
+ Advisor already entitled
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of AdvisorAlreadyEntitled from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of AdvisorAlreadyEntitled from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/advisor_already_entitled_for_direct_emp.py b/symphony/bdk/gen/federation_model/advisor_already_entitled_for_direct_emp.py
new file mode 100644
index 00000000..886e8a87
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/advisor_already_entitled_for_direct_emp.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class AdvisorAlreadyEntitledForDirectEmp(BaseModel):
+ """
+ Advisor is already entitled to another direct EMP
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of AdvisorAlreadyEntitledForDirectEmp from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of AdvisorAlreadyEntitledForDirectEmp from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/advisor_already_has_phone_allocated_problem.py b/symphony/bdk/gen/federation_model/advisor_already_has_phone_allocated_problem.py
new file mode 100644
index 00000000..cdc216c2
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/advisor_already_has_phone_allocated_problem.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class AdvisorAlreadyHasPhoneAllocatedProblem(BaseModel):
+ """
+ The advisor already has an allocated phone number.
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of AdvisorAlreadyHasPhoneAllocatedProblem from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of AdvisorAlreadyHasPhoneAllocatedProblem from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/advisor_contact_rooms_response.py b/symphony/bdk/gen/federation_model/advisor_contact_rooms_response.py
new file mode 100644
index 00000000..292f3613
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/advisor_contact_rooms_response.py
@@ -0,0 +1,132 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, Field, StrictStr, field_validator
+from typing import Any, ClassVar, Dict, List, Optional
+from typing_extensions import Annotated
+from symphony.bdk.gen.federation_model.room_basic_information import RoomBasicInformation
+from typing import Optional, Set
+from typing_extensions import Self
+
+class AdvisorContactRoomsResponse(BaseModel):
+ """
+ Rooms for an advisor and contact
+ """ # noqa: E501
+ advisor_symphony_id: Optional[Annotated[str, Field(strict=True)]] = Field(default=None, alias="advisorSymphonyId")
+ contact_symphony_id: Optional[Annotated[str, Field(strict=True)]] = Field(default=None, alias="contactSymphonyId")
+ sorted_by: Optional[StrictStr] = Field(default=None, alias="sortedBy")
+ rooms: Optional[List[RoomBasicInformation]] = Field(default=None, description="Room basic information")
+ __properties: ClassVar[List[str]] = ["advisorSymphonyId", "contactSymphonyId", "sortedBy", "rooms"]
+
+ @field_validator('advisor_symphony_id')
+ def advisor_symphony_id_validate_regular_expression(cls, value):
+ """Validates the regular expression"""
+ if value is None:
+ return value
+
+ if not re.match(r"^\d+$", value):
+ raise ValueError(r"must validate the regular expression /^\d+$/")
+ return value
+
+ @field_validator('contact_symphony_id')
+ def contact_symphony_id_validate_regular_expression(cls, value):
+ """Validates the regular expression"""
+ if value is None:
+ return value
+
+ if not re.match(r"^\d+$", value):
+ raise ValueError(r"must validate the regular expression /^\d+$/")
+ return value
+
+ @field_validator('sorted_by')
+ def sorted_by_validate_enum(cls, value):
+ """Validates the enum"""
+ if value is None:
+ return value
+
+ if value not in set(['createdDate_DESC']):
+ raise ValueError("must be one of enum values ('createdDate_DESC')")
+ return value
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of AdvisorContactRoomsResponse from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ # override the default output from pydantic by calling `to_dict()` of each item in rooms (list)
+ _items = []
+ if self.rooms:
+ for _item_rooms in self.rooms:
+ if _item_rooms:
+ _items.append(_item_rooms.to_dict())
+ _dict['rooms'] = _items
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of AdvisorContactRoomsResponse from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "advisorSymphonyId": obj.get("advisorSymphonyId"),
+ "contactSymphonyId": obj.get("contactSymphonyId"),
+ "sortedBy": obj.get("sortedBy"),
+ "rooms": [RoomBasicInformation.from_dict(_item) for _item in obj["rooms"]] if obj.get("rooms") is not None else None
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/advisor_id_not_provided.py b/symphony/bdk/gen/federation_model/advisor_id_not_provided.py
new file mode 100644
index 00000000..f00af4ae
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/advisor_id_not_provided.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class AdvisorIdNotProvided(BaseModel):
+ """
+ Advisor ID or email not provided
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of AdvisorIdNotProvided from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of AdvisorIdNotProvided from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/advisor_not_found.py b/symphony/bdk/gen/federation_model/advisor_not_found.py
new file mode 100644
index 00000000..968ea38b
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/advisor_not_found.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class AdvisorNotFound(BaseModel):
+ """
+ Advisor not found
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of AdvisorNotFound from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of AdvisorNotFound from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/advisor_permission_request.py b/symphony/bdk/gen/federation_model/advisor_permission_request.py
new file mode 100644
index 00000000..c4e2f020
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/advisor_permission_request.py
@@ -0,0 +1,87 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, Field, StrictStr
+from typing import Any, ClassVar, Dict, List
+from typing import Optional, Set
+from typing_extensions import Self
+
+class AdvisorPermissionRequest(BaseModel):
+ """
+ AdvisorPermissionRequest
+ """ # noqa: E501
+ permission_name: StrictStr = Field(alias="permissionName")
+ __properties: ClassVar[List[str]] = ["permissionName"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of AdvisorPermissionRequest from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of AdvisorPermissionRequest from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "permissionName": obj.get("permissionName")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/advisor_permission_response.py b/symphony/bdk/gen/federation_model/advisor_permission_response.py
new file mode 100644
index 00000000..d846cb81
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/advisor_permission_response.py
@@ -0,0 +1,95 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, Field, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from symphony.bdk.gen.federation_model.permission_response import PermissionResponse
+from typing import Optional, Set
+from typing_extensions import Self
+
+class AdvisorPermissionResponse(BaseModel):
+ """
+ AdvisorPermissionResponse
+ """ # noqa: E501
+ advisor_symphony_id: Optional[StrictStr] = Field(default=None, alias="advisorSymphonyId")
+ external_network: Optional[StrictStr] = Field(default=None, description="External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE", alias="externalNetwork")
+ permission: Optional[PermissionResponse] = None
+ __properties: ClassVar[List[str]] = ["advisorSymphonyId", "externalNetwork", "permission"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of AdvisorPermissionResponse from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ # override the default output from pydantic by calling `to_dict()` of permission
+ if self.permission:
+ _dict['permission'] = self.permission.to_dict()
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of AdvisorPermissionResponse from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "advisorSymphonyId": obj.get("advisorSymphonyId"),
+ "externalNetwork": obj.get("externalNetwork"),
+ "permission": PermissionResponse.from_dict(obj["permission"]) if obj.get("permission") is not None else None
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/advisor_permissions_response.py b/symphony/bdk/gen/federation_model/advisor_permissions_response.py
new file mode 100644
index 00000000..0703a4c5
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/advisor_permissions_response.py
@@ -0,0 +1,99 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, Field, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from symphony.bdk.gen.federation_model.permission_response import PermissionResponse
+from typing import Optional, Set
+from typing_extensions import Self
+
+class AdvisorPermissionsResponse(BaseModel):
+ """
+ AdvisorPermissionsResponse
+ """ # noqa: E501
+ advisor_symphony_id: Optional[StrictStr] = Field(default=None, alias="advisorSymphonyId")
+ external_network: Optional[StrictStr] = Field(default=None, description="External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE", alias="externalNetwork")
+ permissions: Optional[List[PermissionResponse]] = None
+ __properties: ClassVar[List[str]] = ["advisorSymphonyId", "externalNetwork", "permissions"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of AdvisorPermissionsResponse from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ # override the default output from pydantic by calling `to_dict()` of each item in permissions (list)
+ _items = []
+ if self.permissions:
+ for _item_permissions in self.permissions:
+ if _item_permissions:
+ _items.append(_item_permissions.to_dict())
+ _dict['permissions'] = _items
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of AdvisorPermissionsResponse from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "advisorSymphonyId": obj.get("advisorSymphonyId"),
+ "externalNetwork": obj.get("externalNetwork"),
+ "permissions": [PermissionResponse.from_dict(_item) for _item in obj["permissions"]] if obj.get("permissions") is not None else None
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/advisor_phone_number_already_used_problem.py b/symphony/bdk/gen/federation_model/advisor_phone_number_already_used_problem.py
new file mode 100644
index 00000000..96076da6
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/advisor_phone_number_already_used_problem.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class AdvisorPhoneNumberAlreadyUsedProblem(BaseModel):
+ """
+ Advisor's phone number is already used.
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of AdvisorPhoneNumberAlreadyUsedProblem from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of AdvisorPhoneNumberAlreadyUsedProblem from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/advisor_phone_number_is_required_problem.py b/symphony/bdk/gen/federation_model/advisor_phone_number_is_required_problem.py
new file mode 100644
index 00000000..de3e85a6
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/advisor_phone_number_is_required_problem.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class AdvisorPhoneNumberIsRequiredProblem(BaseModel):
+ """
+ Advisor's phone number is required for this external network.
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of AdvisorPhoneNumberIsRequiredProblem from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of AdvisorPhoneNumberIsRequiredProblem from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/advisor_phone_number_not_supported_problem.py b/symphony/bdk/gen/federation_model/advisor_phone_number_not_supported_problem.py
new file mode 100644
index 00000000..40c858c3
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/advisor_phone_number_not_supported_problem.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class AdvisorPhoneNumberNotSupportedProblem(BaseModel):
+ """
+ Advisor's phone number is not supported for this external network.
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of AdvisorPhoneNumberNotSupportedProblem from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of AdvisorPhoneNumberNotSupportedProblem from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/advisor_still_entitled.py b/symphony/bdk/gen/federation_model/advisor_still_entitled.py
new file mode 100644
index 00000000..54872436
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/advisor_still_entitled.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class AdvisorStillEntitled(BaseModel):
+ """
+ Returned when the advisor associated with the phone number is still entitled to a direct EMP.
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of AdvisorStillEntitled from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of AdvisorStillEntitled from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/advisors_permission_request.py b/symphony/bdk/gen/federation_model/advisors_permission_request.py
new file mode 100644
index 00000000..c0e45438
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/advisors_permission_request.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, Field, StrictStr
+from typing import Any, ClassVar, Dict, List
+from typing import Optional, Set
+from typing_extensions import Self
+
+class AdvisorsPermissionRequest(BaseModel):
+ """
+ AdvisorsPermissionRequest
+ """ # noqa: E501
+ advisor_email_address: List[StrictStr] = Field(alias="advisorEmailAddress")
+ external_network: StrictStr = Field(description="External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE", alias="externalNetwork")
+ permission_name: StrictStr = Field(alias="permissionName")
+ __properties: ClassVar[List[str]] = ["advisorEmailAddress", "externalNetwork", "permissionName"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of AdvisorsPermissionRequest from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of AdvisorsPermissionRequest from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "advisorEmailAddress": obj.get("advisorEmailAddress"),
+ "externalNetwork": obj.get("externalNetwork"),
+ "permissionName": obj.get("permissionName")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/advisors_permission_requestv2.py b/symphony/bdk/gen/federation_model/advisors_permission_requestv2.py
new file mode 100644
index 00000000..e07906d4
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/advisors_permission_requestv2.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, Field, StrictStr
+from typing import Any, ClassVar, Dict, List
+from typing import Optional, Set
+from typing_extensions import Self
+
+class AdvisorsPermissionRequestv2(BaseModel):
+ """
+ AdvisorsPermissionRequestv2
+ """ # noqa: E501
+ advisor_symphony_ids: List[StrictStr] = Field(alias="advisorSymphonyIds")
+ external_network: StrictStr = Field(description="External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE", alias="externalNetwork")
+ permission_name: StrictStr = Field(alias="permissionName")
+ __properties: ClassVar[List[str]] = ["advisorSymphonyIds", "externalNetwork", "permissionName"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of AdvisorsPermissionRequestv2 from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of AdvisorsPermissionRequestv2 from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "advisorSymphonyIds": obj.get("advisorSymphonyIds"),
+ "externalNetwork": obj.get("externalNetwork"),
+ "permissionName": obj.get("permissionName")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/advisors_search_response.py b/symphony/bdk/gen/federation_model/advisors_search_response.py
new file mode 100644
index 00000000..0d3acc34
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/advisors_search_response.py
@@ -0,0 +1,101 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict
+from typing import Any, ClassVar, Dict, List, Optional
+from symphony.bdk.gen.federation_model.entitlement_response import EntitlementResponse
+from symphony.bdk.gen.federation_model.pagination import Pagination
+from typing import Optional, Set
+from typing_extensions import Self
+
+class AdvisorsSearchResponse(BaseModel):
+ """
+ AdvisorsSearchResponse
+ """ # noqa: E501
+ advisors: Optional[List[EntitlementResponse]] = None
+ pagination: Optional[Pagination] = None
+ __properties: ClassVar[List[str]] = ["advisors", "pagination"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of AdvisorsSearchResponse from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ # override the default output from pydantic by calling `to_dict()` of each item in advisors (list)
+ _items = []
+ if self.advisors:
+ for _item_advisors in self.advisors:
+ if _item_advisors:
+ _items.append(_item_advisors.to_dict())
+ _dict['advisors'] = _items
+ # override the default output from pydantic by calling `to_dict()` of pagination
+ if self.pagination:
+ _dict['pagination'] = self.pagination.to_dict()
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of AdvisorsSearchResponse from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "advisors": [EntitlementResponse.from_dict(_item) for _item in obj["advisors"]] if obj.get("advisors") is not None else None,
+ "pagination": Pagination.from_dict(obj["pagination"]) if obj.get("pagination") is not None else None
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/already_room_owner.py b/symphony/bdk/gen/federation_model/already_room_owner.py
new file mode 100644
index 00000000..8576a369
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/already_room_owner.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class AlreadyRoomOwner(BaseModel):
+ """
+ Advisor already room owner.
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of AlreadyRoomOwner from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of AlreadyRoomOwner from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/assigned_to.py b/symphony/bdk/gen/federation_model/assigned_to.py
new file mode 100644
index 00000000..85c8dc90
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/assigned_to.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, Field, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class AssignedTo(BaseModel):
+ """
+ AssignedTo
+ """ # noqa: E501
+ advisor_symphony_id: Optional[StrictStr] = Field(default=None, alias="advisorSymphonyId")
+ advisor_first_name: Optional[StrictStr] = Field(default=None, alias="advisorFirstName")
+ advisor_last_name: Optional[StrictStr] = Field(default=None, alias="advisorLastName")
+ __properties: ClassVar[List[str]] = ["advisorSymphonyId", "advisorFirstName", "advisorLastName"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of AssignedTo from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of AssignedTo from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "advisorSymphonyId": obj.get("advisorSymphonyId"),
+ "advisorFirstName": obj.get("advisorFirstName"),
+ "advisorLastName": obj.get("advisorLastName")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/assigned_to_request.py b/symphony/bdk/gen/federation_model/assigned_to_request.py
new file mode 100644
index 00000000..c9e79dce
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/assigned_to_request.py
@@ -0,0 +1,87 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, Field, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class AssignedToRequest(BaseModel):
+ """
+ AssignedToRequest
+ """ # noqa: E501
+ advisor_symphony_id: Optional[StrictStr] = Field(default=None, description="The Symphony identifier of the advisor to assign this resource to, or empty string to unassign. ", alias="advisorSymphonyId")
+ __properties: ClassVar[List[str]] = ["advisorSymphonyId"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of AssignedToRequest from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of AssignedToRequest from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "advisorSymphonyId": obj.get("advisorSymphonyId")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/block_contact_information.py b/symphony/bdk/gen/federation_model/block_contact_information.py
new file mode 100644
index 00000000..7da1037c
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/block_contact_information.py
@@ -0,0 +1,92 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from datetime import datetime
+from pydantic import BaseModel, ConfigDict, Field, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class BlockContactInformation(BaseModel):
+ """
+ BlockContactInformation
+ """ # noqa: E501
+ reason: Optional[StrictStr] = None
+ comment: Optional[StrictStr] = None
+ update_date: Optional[datetime] = Field(default=None, alias="updateDate")
+ __properties: ClassVar[List[str]] = ["reason", "comment", "updateDate"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of BlockContactInformation from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of BlockContactInformation from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "reason": obj.get("reason"),
+ "comment": obj.get("comment"),
+ "updateDate": obj.get("updateDate")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/blocked_by_item.py b/symphony/bdk/gen/federation_model/blocked_by_item.py
new file mode 100644
index 00000000..4eb22197
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/blocked_by_item.py
@@ -0,0 +1,95 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from datetime import datetime
+from pydantic import BaseModel, ConfigDict, Field, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from symphony.bdk.gen.federation_model.blocking_reason_enum import BlockingReasonEnum
+from typing import Optional, Set
+from typing_extensions import Self
+
+class BlockedByItem(BaseModel):
+ """
+ BlockedByItem
+ """ # noqa: E501
+ advisor_symphony_id: Optional[StrictStr] = Field(default=None, alias="advisorSymphonyId")
+ reason: Optional[BlockingReasonEnum] = None
+ comment: Optional[StrictStr] = None
+ request_date: Optional[datetime] = Field(default=None, alias="requestDate")
+ __properties: ClassVar[List[str]] = ["advisorSymphonyId", "reason", "comment", "requestDate"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of BlockedByItem from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of BlockedByItem from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "advisorSymphonyId": obj.get("advisorSymphonyId"),
+ "reason": obj.get("reason"),
+ "comment": obj.get("comment"),
+ "requestDate": obj.get("requestDate")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/blocking_reason_enum.py b/symphony/bdk/gen/federation_model/blocking_reason_enum.py
new file mode 100644
index 00000000..aa445321
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/blocking_reason_enum.py
@@ -0,0 +1,39 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import json
+from enum import Enum
+from typing_extensions import Self
+
+
+class BlockingReasonEnum(str, Enum):
+ """
+ BlockingReasonEnum
+ """
+
+ """
+ allowed enum values
+ """
+ SPAM = 'SPAM'
+ ABUSE = 'ABUSE'
+ COMPLIANCE = 'COMPLIANCE'
+ OTHER = 'OTHER'
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Self:
+ """Create an instance of BlockingReasonEnum from a JSON string"""
+ return cls(json.loads(json_str))
+
+
diff --git a/symphony/bdk/gen/federation_model/bulk_advisor_permission_item_response.py b/symphony/bdk/gen/federation_model/bulk_advisor_permission_item_response.py
new file mode 100644
index 00000000..ac4d5996
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/bulk_advisor_permission_item_response.py
@@ -0,0 +1,99 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt
+from typing import Any, ClassVar, Dict, List, Optional
+from symphony.bdk.gen.federation_model.advisor_permission_response import AdvisorPermissionResponse
+from symphony.bdk.gen.federation_model.bulk_item_error import BulkItemError
+from typing import Optional, Set
+from typing_extensions import Self
+
+class BulkAdvisorPermissionItemResponse(BaseModel):
+ """
+ BulkAdvisorPermissionItemResponse
+ """ # noqa: E501
+ status: Optional[StrictInt] = None
+ response: Optional[AdvisorPermissionResponse] = None
+ error: Optional[BulkItemError] = None
+ __properties: ClassVar[List[str]] = ["status", "response", "error"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of BulkAdvisorPermissionItemResponse from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ # override the default output from pydantic by calling `to_dict()` of response
+ if self.response:
+ _dict['response'] = self.response.to_dict()
+ # override the default output from pydantic by calling `to_dict()` of error
+ if self.error:
+ _dict['error'] = self.error.to_dict()
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of BulkAdvisorPermissionItemResponse from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "status": obj.get("status"),
+ "response": AdvisorPermissionResponse.from_dict(obj["response"]) if obj.get("response") is not None else None,
+ "error": BulkItemError.from_dict(obj["error"]) if obj.get("error") is not None else None
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/bulk_advisor_permission_response.py b/symphony/bdk/gen/federation_model/bulk_advisor_permission_response.py
new file mode 100644
index 00000000..7940c318
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/bulk_advisor_permission_response.py
@@ -0,0 +1,95 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, Field
+from typing import Any, ClassVar, Dict, List, Optional
+from symphony.bdk.gen.federation_model.bulk_advisor_permission_item_response import BulkAdvisorPermissionItemResponse
+from typing import Optional, Set
+from typing_extensions import Self
+
+class BulkAdvisorPermissionResponse(BaseModel):
+ """
+ BulkAdvisorPermissionResponse
+ """ # noqa: E501
+ advisors_permissions: Optional[List[BulkAdvisorPermissionItemResponse]] = Field(default=None, alias="advisorsPermissions")
+ __properties: ClassVar[List[str]] = ["advisorsPermissions"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of BulkAdvisorPermissionResponse from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ # override the default output from pydantic by calling `to_dict()` of each item in advisors_permissions (list)
+ _items = []
+ if self.advisors_permissions:
+ for _item_advisors_permissions in self.advisors_permissions:
+ if _item_advisors_permissions:
+ _items.append(_item_advisors_permissions.to_dict())
+ _dict['advisorsPermissions'] = _items
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of BulkAdvisorPermissionResponse from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "advisorsPermissions": [BulkAdvisorPermissionItemResponse.from_dict(_item) for _item in obj["advisorsPermissions"]] if obj.get("advisorsPermissions") is not None else None
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/bulk_item_error.py b/symphony/bdk/gen/federation_model/bulk_item_error.py
new file mode 100644
index 00000000..f757b64b
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/bulk_item_error.py
@@ -0,0 +1,104 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, Field, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing_extensions import Annotated
+from symphony.bdk.gen.federation_model.bulk_item_error_parameters import BulkItemErrorParameters
+from typing import Optional, Set
+from typing_extensions import Self
+
+class BulkItemError(BaseModel):
+ """
+ BulkItemError
+ """ # noqa: E501
+ item_id: Optional[StrictStr] = Field(default=None, description="Context dependent identifier of the item", alias="itemId")
+ type: Optional[StrictStr] = Field(default='about:blank', description="An absolute URI that identifies the problem type. When dereferenced, it SHOULD provide human-readable documentation for the problem type (e.g., using HTML). ")
+ title: Optional[StrictStr] = Field(default=None, description="A short, summary of the problem type. Written in English and readable for engineers (usually not suited for non technical stakeholders and not localized); example: Service Unavailable ")
+ status_code: Optional[Annotated[int, Field(lt=600, strict=True, ge=100)]] = Field(default=None, description="The HTTP status code generated by the origin server for this occurrence of the problem. ", alias="statusCode")
+ detail: Optional[StrictStr] = Field(default=None, description="A human readable explanation specific to this occurrence of the problem. ")
+ instance: Optional[StrictStr] = Field(default=None, description="An absolute URI that identifies the specific occurrence of the problem. It may or may not yield further information if dereferenced. ")
+ parameters: Optional[BulkItemErrorParameters] = None
+ __properties: ClassVar[List[str]] = ["itemId", "type", "title", "statusCode", "detail", "instance", "parameters"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of BulkItemError from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ # override the default output from pydantic by calling `to_dict()` of parameters
+ if self.parameters:
+ _dict['parameters'] = self.parameters.to_dict()
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of BulkItemError from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "itemId": obj.get("itemId"),
+ "type": obj.get("type") if obj.get("type") is not None else 'about:blank',
+ "title": obj.get("title"),
+ "statusCode": obj.get("statusCode"),
+ "detail": obj.get("detail"),
+ "instance": obj.get("instance"),
+ "parameters": BulkItemErrorParameters.from_dict(obj["parameters"]) if obj.get("parameters") is not None else None
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/bulk_item_error_parameters.py b/symphony/bdk/gen/federation_model/bulk_item_error_parameters.py
new file mode 100644
index 00000000..e3f74ef4
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/bulk_item_error_parameters.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, Field, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class BulkItemErrorParameters(BaseModel):
+ """
+ BulkItemErrorParameters
+ """ # noqa: E501
+ additional_prop1: Optional[StrictStr] = Field(default=None, alias="additionalProp1")
+ additional_prop2: Optional[StrictStr] = Field(default=None, alias="additionalProp2")
+ additional_prop3: Optional[StrictStr] = Field(default=None, alias="additionalProp3")
+ __properties: ClassVar[List[str]] = ["additionalProp1", "additionalProp2", "additionalProp3"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of BulkItemErrorParameters from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of BulkItemErrorParameters from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "additionalProp1": obj.get("additionalProp1"),
+ "additionalProp2": obj.get("additionalProp2"),
+ "additionalProp3": obj.get("additionalProp3")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/bulk_permission_item.py b/symphony/bdk/gen/federation_model/bulk_permission_item.py
new file mode 100644
index 00000000..c0aab6ee
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/bulk_permission_item.py
@@ -0,0 +1,99 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt
+from typing import Any, ClassVar, Dict, List, Optional
+from symphony.bdk.gen.federation_model.bulk_item_error import BulkItemError
+from symphony.bdk.gen.federation_model.permission_response import PermissionResponse
+from typing import Optional, Set
+from typing_extensions import Self
+
+class BulkPermissionItem(BaseModel):
+ """
+ BulkPermissionItem
+ """ # noqa: E501
+ status: Optional[StrictInt] = None
+ response: Optional[PermissionResponse] = None
+ error: Optional[BulkItemError] = None
+ __properties: ClassVar[List[str]] = ["status", "response", "error"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of BulkPermissionItem from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ # override the default output from pydantic by calling `to_dict()` of response
+ if self.response:
+ _dict['response'] = self.response.to_dict()
+ # override the default output from pydantic by calling `to_dict()` of error
+ if self.error:
+ _dict['error'] = self.error.to_dict()
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of BulkPermissionItem from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "status": obj.get("status"),
+ "response": PermissionResponse.from_dict(obj["response"]) if obj.get("response") is not None else None,
+ "error": BulkItemError.from_dict(obj["error"]) if obj.get("error") is not None else None
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/bulk_removal_status.py b/symphony/bdk/gen/federation_model/bulk_removal_status.py
new file mode 100644
index 00000000..af6e1aea
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/bulk_removal_status.py
@@ -0,0 +1,37 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import json
+from enum import Enum
+from typing_extensions import Self
+
+
+class BulkRemovalStatus(str, Enum):
+ """
+ BulkRemovalStatus
+ """
+
+ """
+ allowed enum values
+ """
+ FAILURE = 'FAILURE'
+ SUCCESS = 'SUCCESS'
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Self:
+ """Create an instance of BulkRemovalStatus from a JSON string"""
+ return cls(json.loads(json_str))
+
+
diff --git a/symphony/bdk/gen/federation_model/bulk_removal_statusv2.py b/symphony/bdk/gen/federation_model/bulk_removal_statusv2.py
new file mode 100644
index 00000000..0bcc0c12
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/bulk_removal_statusv2.py
@@ -0,0 +1,38 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import json
+from enum import Enum
+from typing_extensions import Self
+
+
+class BulkRemovalStatusv2(str, Enum):
+ """
+ BulkRemovalStatusv2
+ """
+
+ """
+ allowed enum values
+ """
+ FAILURE = 'FAILURE'
+ SUCCESS = 'SUCCESS'
+ NOT_FOUND = 'NOT_FOUND'
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Self:
+ """Create an instance of BulkRemovalStatusv2 from a JSON string"""
+ return cls(json.loads(json_str))
+
+
diff --git a/symphony/bdk/gen/federation_model/bulk_room_member_item_response.py b/symphony/bdk/gen/federation_model/bulk_room_member_item_response.py
new file mode 100644
index 00000000..d125860a
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/bulk_room_member_item_response.py
@@ -0,0 +1,99 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt
+from typing import Any, ClassVar, Dict, List, Optional
+from symphony.bdk.gen.federation_model.bulk_item_error import BulkItemError
+from symphony.bdk.gen.federation_model.room_member_response import RoomMemberResponse
+from typing import Optional, Set
+from typing_extensions import Self
+
+class BulkRoomMemberItemResponse(BaseModel):
+ """
+ BulkRoomMemberItemResponse
+ """ # noqa: E501
+ status: Optional[StrictInt] = None
+ response: Optional[RoomMemberResponse] = None
+ error: Optional[BulkItemError] = None
+ __properties: ClassVar[List[str]] = ["status", "response", "error"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of BulkRoomMemberItemResponse from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ # override the default output from pydantic by calling `to_dict()` of response
+ if self.response:
+ _dict['response'] = self.response.to_dict()
+ # override the default output from pydantic by calling `to_dict()` of error
+ if self.error:
+ _dict['error'] = self.error.to_dict()
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of BulkRoomMemberItemResponse from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "status": obj.get("status"),
+ "response": RoomMemberResponse.from_dict(obj["response"]) if obj.get("response") is not None else None,
+ "error": BulkItemError.from_dict(obj["error"]) if obj.get("error") is not None else None
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/bulk_room_member_item_responsev2.py b/symphony/bdk/gen/federation_model/bulk_room_member_item_responsev2.py
new file mode 100644
index 00000000..f12b37c9
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/bulk_room_member_item_responsev2.py
@@ -0,0 +1,99 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt
+from typing import Any, ClassVar, Dict, List, Optional
+from symphony.bdk.gen.federation_model.bulk_item_error import BulkItemError
+from symphony.bdk.gen.federation_model.room_member_response import RoomMemberResponse
+from typing import Optional, Set
+from typing_extensions import Self
+
+class BulkRoomMemberItemResponsev2(BaseModel):
+ """
+ BulkRoomMemberItemResponsev2
+ """ # noqa: E501
+ status: Optional[StrictInt] = None
+ response: Optional[RoomMemberResponse] = None
+ error: Optional[BulkItemError] = None
+ __properties: ClassVar[List[str]] = ["status", "response", "error"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of BulkRoomMemberItemResponsev2 from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ # override the default output from pydantic by calling `to_dict()` of response
+ if self.response:
+ _dict['response'] = self.response.to_dict()
+ # override the default output from pydantic by calling `to_dict()` of error
+ if self.error:
+ _dict['error'] = self.error.to_dict()
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of BulkRoomMemberItemResponsev2 from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "status": obj.get("status"),
+ "response": RoomMemberResponse.from_dict(obj["response"]) if obj.get("response") is not None else None,
+ "error": BulkItemError.from_dict(obj["error"]) if obj.get("error") is not None else None
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/bulk_room_member_multi_room_request.py b/symphony/bdk/gen/federation_model/bulk_room_member_multi_room_request.py
new file mode 100644
index 00000000..c59d018d
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/bulk_room_member_multi_room_request.py
@@ -0,0 +1,100 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, Field, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing_extensions import Annotated
+from symphony.bdk.gen.federation_model.room_member_multi_room_request import RoomMemberMultiRoomRequest
+from typing import Optional, Set
+from typing_extensions import Self
+
+class BulkRoomMemberMultiRoomRequest(BaseModel):
+ """
+ BulkRoomMemberMultiRoomRequest
+ """ # noqa: E501
+ requests: Optional[Annotated[List[RoomMemberMultiRoomRequest], Field(min_length=1, max_length=100)]] = None
+ advisor_email_address: Optional[StrictStr] = Field(default=None, alias="advisorEmailAddress")
+ external_network: Optional[StrictStr] = Field(default=None, description="External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE", alias="externalNetwork")
+ __properties: ClassVar[List[str]] = ["requests", "advisorEmailAddress", "externalNetwork"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of BulkRoomMemberMultiRoomRequest from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ # override the default output from pydantic by calling `to_dict()` of each item in requests (list)
+ _items = []
+ if self.requests:
+ for _item_requests in self.requests:
+ if _item_requests:
+ _items.append(_item_requests.to_dict())
+ _dict['requests'] = _items
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of BulkRoomMemberMultiRoomRequest from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "requests": [RoomMemberMultiRoomRequest.from_dict(_item) for _item in obj["requests"]] if obj.get("requests") is not None else None,
+ "advisorEmailAddress": obj.get("advisorEmailAddress"),
+ "externalNetwork": obj.get("externalNetwork")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/bulk_room_member_multi_room_requestv2.py b/symphony/bdk/gen/federation_model/bulk_room_member_multi_room_requestv2.py
new file mode 100644
index 00000000..d93ffcb2
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/bulk_room_member_multi_room_requestv2.py
@@ -0,0 +1,101 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from decimal import Decimal
+from pydantic import BaseModel, ConfigDict, Field, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing_extensions import Annotated
+from symphony.bdk.gen.federation_model.room_member_multi_room_requestv2 import RoomMemberMultiRoomRequestv2
+from typing import Optional, Set
+from typing_extensions import Self
+
+class BulkRoomMemberMultiRoomRequestv2(BaseModel):
+ """
+ BulkRoomMemberMultiRoomRequestv2
+ """ # noqa: E501
+ requests: Optional[Annotated[List[RoomMemberMultiRoomRequestv2], Field(min_length=1, max_length=20)]] = None
+ advisor_symphony_id: Optional[Decimal] = Field(default=None, alias="advisorSymphonyId")
+ external_network: Optional[StrictStr] = Field(default=None, description="External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE", alias="externalNetwork")
+ __properties: ClassVar[List[str]] = ["requests", "advisorSymphonyId", "externalNetwork"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of BulkRoomMemberMultiRoomRequestv2 from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ # override the default output from pydantic by calling `to_dict()` of each item in requests (list)
+ _items = []
+ if self.requests:
+ for _item_requests in self.requests:
+ if _item_requests:
+ _items.append(_item_requests.to_dict())
+ _dict['requests'] = _items
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of BulkRoomMemberMultiRoomRequestv2 from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "requests": [RoomMemberMultiRoomRequestv2.from_dict(_item) for _item in obj["requests"]] if obj.get("requests") is not None else None,
+ "advisorSymphonyId": obj.get("advisorSymphonyId"),
+ "externalNetwork": obj.get("externalNetwork")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/bulk_room_member_response.py b/symphony/bdk/gen/federation_model/bulk_room_member_response.py
new file mode 100644
index 00000000..cbadcb07
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/bulk_room_member_response.py
@@ -0,0 +1,95 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict
+from typing import Any, ClassVar, Dict, List, Optional
+from symphony.bdk.gen.federation_model.bulk_room_member_item_response import BulkRoomMemberItemResponse
+from typing import Optional, Set
+from typing_extensions import Self
+
+class BulkRoomMemberResponse(BaseModel):
+ """
+ BulkRoomMemberResponse
+ """ # noqa: E501
+ members: Optional[List[BulkRoomMemberItemResponse]] = None
+ __properties: ClassVar[List[str]] = ["members"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of BulkRoomMemberResponse from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ # override the default output from pydantic by calling `to_dict()` of each item in members (list)
+ _items = []
+ if self.members:
+ for _item_members in self.members:
+ if _item_members:
+ _items.append(_item_members.to_dict())
+ _dict['members'] = _items
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of BulkRoomMemberResponse from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "members": [BulkRoomMemberItemResponse.from_dict(_item) for _item in obj["members"]] if obj.get("members") is not None else None
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/bulk_room_member_responsev2.py b/symphony/bdk/gen/federation_model/bulk_room_member_responsev2.py
new file mode 100644
index 00000000..dd20e271
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/bulk_room_member_responsev2.py
@@ -0,0 +1,95 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict
+from typing import Any, ClassVar, Dict, List, Optional
+from symphony.bdk.gen.federation_model.bulk_room_member_item_responsev2 import BulkRoomMemberItemResponsev2
+from typing import Optional, Set
+from typing_extensions import Self
+
+class BulkRoomMemberResponsev2(BaseModel):
+ """
+ BulkRoomMemberResponsev2
+ """ # noqa: E501
+ members: Optional[List[BulkRoomMemberItemResponsev2]] = None
+ __properties: ClassVar[List[str]] = ["members"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of BulkRoomMemberResponsev2 from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ # override the default output from pydantic by calling `to_dict()` of each item in members (list)
+ _items = []
+ if self.members:
+ for _item_members in self.members:
+ if _item_members:
+ _items.append(_item_members.to_dict())
+ _dict['members'] = _items
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of BulkRoomMemberResponsev2 from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "members": [BulkRoomMemberItemResponsev2.from_dict(_item) for _item in obj["members"]] if obj.get("members") is not None else None
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/bulk_update_advisors_federation_group404_response.py b/symphony/bdk/gen/federation_model/bulk_update_advisors_federation_group404_response.py
new file mode 100644
index 00000000..dba13a37
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/bulk_update_advisors_federation_group404_response.py
@@ -0,0 +1,137 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import json
+import pprint
+from pydantic import BaseModel, ConfigDict, Field, StrictStr, ValidationError, field_validator
+from typing import Any, List, Optional
+from symphony.bdk.gen.federation_model.advisor_not_found import AdvisorNotFound
+from symphony.bdk.gen.federation_model.federation_group_not_found import FederationGroupNotFound
+from pydantic import StrictStr, Field
+from typing import Union, List, Set, Optional, Dict
+from typing_extensions import Literal, Self
+
+BULKUPDATEADVISORSFEDERATIONGROUP404RESPONSE_ONE_OF_SCHEMAS = ["AdvisorNotFound", "FederationGroupNotFound"]
+
+class BulkUpdateAdvisorsFederationGroup404Response(BaseModel):
+ """
+ BulkUpdateAdvisorsFederationGroup404Response
+ """
+ # data type: AdvisorNotFound
+ oneof_schema_1_validator: Optional[AdvisorNotFound] = None
+ # data type: FederationGroupNotFound
+ oneof_schema_2_validator: Optional[FederationGroupNotFound] = None
+ actual_instance: Optional[Union[AdvisorNotFound, FederationGroupNotFound]] = None
+ one_of_schemas: Set[str] = { "AdvisorNotFound", "FederationGroupNotFound" }
+
+ model_config = ConfigDict(
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def __init__(self, *args, **kwargs) -> None:
+ if args:
+ if len(args) > 1:
+ raise ValueError("If a position argument is used, only 1 is allowed to set `actual_instance`")
+ if kwargs:
+ raise ValueError("If a position argument is used, keyword arguments cannot be used.")
+ super().__init__(actual_instance=args[0])
+ else:
+ super().__init__(**kwargs)
+
+ @field_validator('actual_instance')
+ def actual_instance_must_validate_oneof(cls, v):
+ instance = BulkUpdateAdvisorsFederationGroup404Response.model_construct()
+ error_messages = []
+ match = 0
+ # validate data type: AdvisorNotFound
+ if not isinstance(v, AdvisorNotFound):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `AdvisorNotFound`")
+ else:
+ match += 1
+ # validate data type: FederationGroupNotFound
+ if not isinstance(v, FederationGroupNotFound):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `FederationGroupNotFound`")
+ else:
+ match += 1
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when setting `actual_instance` in BulkUpdateAdvisorsFederationGroup404Response with oneOf schemas: AdvisorNotFound, FederationGroupNotFound. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when setting `actual_instance` in BulkUpdateAdvisorsFederationGroup404Response with oneOf schemas: AdvisorNotFound, FederationGroupNotFound. Details: " + ", ".join(error_messages))
+ else:
+ return v
+
+ @classmethod
+ def from_dict(cls, obj: Union[str, Dict[str, Any]]) -> Self:
+ return cls.from_json(json.dumps(obj))
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Self:
+ """Returns the object represented by the json string"""
+ instance = cls.model_construct()
+ error_messages = []
+ match = 0
+
+ # deserialize data into AdvisorNotFound
+ try:
+ instance.actual_instance = AdvisorNotFound.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+ # deserialize data into FederationGroupNotFound
+ try:
+ instance.actual_instance = FederationGroupNotFound.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when deserializing the JSON string into BulkUpdateAdvisorsFederationGroup404Response with oneOf schemas: AdvisorNotFound, FederationGroupNotFound. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when deserializing the JSON string into BulkUpdateAdvisorsFederationGroup404Response with oneOf schemas: AdvisorNotFound, FederationGroupNotFound. Details: " + ", ".join(error_messages))
+ else:
+ return instance
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the actual instance"""
+ if self.actual_instance is None:
+ return "null"
+
+ if hasattr(self.actual_instance, "to_json") and callable(self.actual_instance.to_json):
+ return self.actual_instance.to_json()
+ else:
+ return json.dumps(self.actual_instance)
+
+ def to_dict(self) -> Optional[Union[Dict[str, Any], AdvisorNotFound, FederationGroupNotFound]]:
+ """Returns the dict representation of the actual instance"""
+ if self.actual_instance is None:
+ return None
+
+ if hasattr(self.actual_instance, "to_dict") and callable(self.actual_instance.to_dict):
+ return self.actual_instance.to_dict()
+ else:
+ # primitive type
+ return self.actual_instance
+
+ def to_str(self) -> str:
+ """Returns the string representation of the actual instance"""
+ return pprint.pformat(self.model_dump())
+
+
diff --git a/symphony/bdk/gen/federation_model/bulk_update_federation_group_item_request.py b/symphony/bdk/gen/federation_model/bulk_update_federation_group_item_request.py
new file mode 100644
index 00000000..f818e496
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/bulk_update_federation_group_item_request.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, Field, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class BulkUpdateFederationGroupItemRequest(BaseModel):
+ """
+ BulkUpdateFederationGroupItemRequest
+ """ # noqa: E501
+ symphony_id: StrictStr = Field(alias="symphonyId")
+ external_network: StrictStr = Field(description="External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE", alias="externalNetwork")
+ federation_group_id: Optional[StrictStr] = Field(default=None, alias="federationGroupId")
+ __properties: ClassVar[List[str]] = ["symphonyId", "externalNetwork", "federationGroupId"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of BulkUpdateFederationGroupItemRequest from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of BulkUpdateFederationGroupItemRequest from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "symphonyId": obj.get("symphonyId"),
+ "externalNetwork": obj.get("externalNetwork"),
+ "federationGroupId": obj.get("federationGroupId")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/bulk_update_federation_group_item_response.py b/symphony/bdk/gen/federation_model/bulk_update_federation_group_item_response.py
new file mode 100644
index 00000000..1fb750b7
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/bulk_update_federation_group_item_response.py
@@ -0,0 +1,99 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt
+from typing import Any, ClassVar, Dict, List, Optional
+from symphony.bdk.gen.federation_model.bulk_item_error import BulkItemError
+from symphony.bdk.gen.federation_model.update_federation_group_response import UpdateFederationGroupResponse
+from typing import Optional, Set
+from typing_extensions import Self
+
+class BulkUpdateFederationGroupItemResponse(BaseModel):
+ """
+ BulkUpdateFederationGroupItemResponse
+ """ # noqa: E501
+ status: Optional[StrictInt] = None
+ response: Optional[UpdateFederationGroupResponse] = None
+ error: Optional[BulkItemError] = None
+ __properties: ClassVar[List[str]] = ["status", "response", "error"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of BulkUpdateFederationGroupItemResponse from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ # override the default output from pydantic by calling `to_dict()` of response
+ if self.response:
+ _dict['response'] = self.response.to_dict()
+ # override the default output from pydantic by calling `to_dict()` of error
+ if self.error:
+ _dict['error'] = self.error.to_dict()
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of BulkUpdateFederationGroupItemResponse from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "status": obj.get("status"),
+ "response": UpdateFederationGroupResponse.from_dict(obj["response"]) if obj.get("response") is not None else None,
+ "error": BulkItemError.from_dict(obj["error"]) if obj.get("error") is not None else None
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/bulk_update_federation_group_request.py b/symphony/bdk/gen/federation_model/bulk_update_federation_group_request.py
new file mode 100644
index 00000000..78a6a747
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/bulk_update_federation_group_request.py
@@ -0,0 +1,96 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, Field
+from typing import Any, ClassVar, Dict, List, Optional
+from typing_extensions import Annotated
+from symphony.bdk.gen.federation_model.bulk_update_federation_group_item_request import BulkUpdateFederationGroupItemRequest
+from typing import Optional, Set
+from typing_extensions import Self
+
+class BulkUpdateFederationGroupRequest(BaseModel):
+ """
+ BulkUpdateFederationGroupRequest
+ """ # noqa: E501
+ request: Optional[Annotated[List[BulkUpdateFederationGroupItemRequest], Field(min_length=1, max_length=100)]] = None
+ __properties: ClassVar[List[str]] = ["request"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of BulkUpdateFederationGroupRequest from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ # override the default output from pydantic by calling `to_dict()` of each item in request (list)
+ _items = []
+ if self.request:
+ for _item_request in self.request:
+ if _item_request:
+ _items.append(_item_request.to_dict())
+ _dict['request'] = _items
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of BulkUpdateFederationGroupRequest from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "request": [BulkUpdateFederationGroupItemRequest.from_dict(_item) for _item in obj["request"]] if obj.get("request") is not None else None
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/bulk_update_federation_group_response.py b/symphony/bdk/gen/federation_model/bulk_update_federation_group_response.py
new file mode 100644
index 00000000..b40b5ac9
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/bulk_update_federation_group_response.py
@@ -0,0 +1,95 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict
+from typing import Any, ClassVar, Dict, List, Optional
+from symphony.bdk.gen.federation_model.bulk_update_federation_group_item_response import BulkUpdateFederationGroupItemResponse
+from typing import Optional, Set
+from typing_extensions import Self
+
+class BulkUpdateFederationGroupResponse(BaseModel):
+ """
+ BulkUpdateFederationGroupResponse
+ """ # noqa: E501
+ responses: Optional[List[BulkUpdateFederationGroupItemResponse]] = None
+ __properties: ClassVar[List[str]] = ["responses"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of BulkUpdateFederationGroupResponse from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ # override the default output from pydantic by calling `to_dict()` of each item in responses (list)
+ _items = []
+ if self.responses:
+ for _item_responses in self.responses:
+ if _item_responses:
+ _items.append(_item_responses.to_dict())
+ _dict['responses'] = _items
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of BulkUpdateFederationGroupResponse from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "responses": [BulkUpdateFederationGroupItemResponse.from_dict(_item) for _item in obj["responses"]] if obj.get("responses") is not None else None
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/cannot_edit_advisor_own_contact_email.py b/symphony/bdk/gen/federation_model/cannot_edit_advisor_own_contact_email.py
new file mode 100644
index 00000000..0d1dec13
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/cannot_edit_advisor_own_contact_email.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class CannotEditAdvisorOwnContactEmail(BaseModel):
+ """
+ Cannot edit advisor own contact email
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of CannotEditAdvisorOwnContactEmail from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of CannotEditAdvisorOwnContactEmail from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/cannot_rename_room_duplicate_room_name.py b/symphony/bdk/gen/federation_model/cannot_rename_room_duplicate_room_name.py
new file mode 100644
index 00000000..9a4351e8
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/cannot_rename_room_duplicate_room_name.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class CannotRenameRoomDuplicateRoomName(BaseModel):
+ """
+ Cannot rename room because the owner already has a room with the same name.
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of CannotRenameRoomDuplicateRoomName from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of CannotRenameRoomDuplicateRoomName from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/cannot_transfer_room_ownership_duplicate_room_name.py b/symphony/bdk/gen/federation_model/cannot_transfer_room_ownership_duplicate_room_name.py
new file mode 100644
index 00000000..a642ed17
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/cannot_transfer_room_ownership_duplicate_room_name.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class CannotTransferRoomOwnershipDuplicateRoomName(BaseModel):
+ """
+ Cannot transfer room ownership because the advisor is already owner of a room with the same name
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of CannotTransferRoomOwnershipDuplicateRoomName from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of CannotTransferRoomOwnershipDuplicateRoomName from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/companies_search_response.py b/symphony/bdk/gen/federation_model/companies_search_response.py
new file mode 100644
index 00000000..6654b7ec
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/companies_search_response.py
@@ -0,0 +1,95 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict
+from typing import Any, ClassVar, Dict, List, Optional
+from symphony.bdk.gen.federation_model.company_response import CompanyResponse
+from typing import Optional, Set
+from typing_extensions import Self
+
+class CompaniesSearchResponse(BaseModel):
+ """
+ CompaniesSearchResponse
+ """ # noqa: E501
+ companies: Optional[List[CompanyResponse]] = None
+ __properties: ClassVar[List[str]] = ["companies"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of CompaniesSearchResponse from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ # override the default output from pydantic by calling `to_dict()` of each item in companies (list)
+ _items = []
+ if self.companies:
+ for _item_companies in self.companies:
+ if _item_companies:
+ _items.append(_item_companies.to_dict())
+ _dict['companies'] = _items
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of CompaniesSearchResponse from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "companies": [CompanyResponse.from_dict(_item) for _item in obj["companies"]] if obj.get("companies") is not None else None
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/company_not_found.py b/symphony/bdk/gen/federation_model/company_not_found.py
new file mode 100644
index 00000000..3ee5f42e
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/company_not_found.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class CompanyNotFound(BaseModel):
+ """
+ Company not found
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of CompanyNotFound from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of CompanyNotFound from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/company_response.py b/symphony/bdk/gen/federation_model/company_response.py
new file mode 100644
index 00000000..8242babf
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/company_response.py
@@ -0,0 +1,87 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, Field, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class CompanyResponse(BaseModel):
+ """
+ CompanyResponse
+ """ # noqa: E501
+ company_name: Optional[StrictStr] = Field(default=None, alias="companyName")
+ __properties: ClassVar[List[str]] = ["companyName"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of CompanyResponse from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of CompanyResponse from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "companyName": obj.get("companyName")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/connection_not_accepted.py b/symphony/bdk/gen/federation_model/connection_not_accepted.py
new file mode 100644
index 00000000..4e365198
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/connection_not_accepted.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class ConnectionNotAccepted(BaseModel):
+ """
+ Connection with Symphony Connect Assistant is not accepted
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of ConnectionNotAccepted from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of ConnectionNotAccepted from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/contact_not_found.py b/symphony/bdk/gen/federation_model/contact_not_found.py
new file mode 100644
index 00000000..e33917a9
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/contact_not_found.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class ContactNotFound(BaseModel):
+ """
+ Contact not found
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of ContactNotFound from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of ContactNotFound from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/contact_request.py b/symphony/bdk/gen/federation_model/contact_request.py
new file mode 100644
index 00000000..83506a25
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/contact_request.py
@@ -0,0 +1,102 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, Field, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional, Union
+from typing_extensions import Annotated
+from typing import Optional, Set
+from typing_extensions import Self
+
+class ContactRequest(BaseModel):
+ """
+ ContactRequest
+ """ # noqa: E501
+ first_name: StrictStr = Field(alias="firstName")
+ last_name: StrictStr = Field(alias="lastName")
+ company_name: Optional[Annotated[str, Field(strict=True, max_length=100)]] = Field(default=None, description="For SMS, LINE, WHATSAPP and WECHAT, the companyName is mandatory", alias="companyName")
+ email_address: Optional[StrictStr] = Field(default=None, description="For SMS, LINE, WHATSAPP and WECHAT, the emailAddress is mandatory", alias="emailAddress")
+ phone_number: StrictStr = Field(alias="phoneNumber")
+ external_network: StrictStr = Field(description="External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE", alias="externalNetwork")
+ advisor_symphony_ids: Optional[List[Union[Annotated[float, Field(strict=True)], Annotated[int, Field(strict=True)]]]] = Field(default=None, description="A list of Symphony user IDs of the advisors to add the contact to.", alias="advisorSymphonyIds")
+ preferred_language: Optional[StrictStr] = Field(default=None, description="Contact preferred language code", alias="preferredLanguage")
+ __properties: ClassVar[List[str]] = ["firstName", "lastName", "companyName", "emailAddress", "phoneNumber", "externalNetwork", "advisorSymphonyIds", "preferredLanguage"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of ContactRequest from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of ContactRequest from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "firstName": obj.get("firstName"),
+ "lastName": obj.get("lastName"),
+ "companyName": obj.get("companyName"),
+ "emailAddress": obj.get("emailAddress"),
+ "phoneNumber": obj.get("phoneNumber"),
+ "externalNetwork": obj.get("externalNetwork"),
+ "advisorSymphonyIds": obj.get("advisorSymphonyIds"),
+ "preferredLanguage": obj.get("preferredLanguage")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/contact_status.py b/symphony/bdk/gen/federation_model/contact_status.py
new file mode 100644
index 00000000..de4bffc8
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/contact_status.py
@@ -0,0 +1,42 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import json
+from enum import Enum
+from typing_extensions import Self
+
+
+class ContactStatus(str, Enum):
+ """
+ ContactStatus
+ """
+
+ """
+ allowed enum values
+ """
+ PENDING_CONFIRMATION = 'PENDING_CONFIRMATION'
+ CONFIRMED = 'CONFIRMED'
+ INVITE_EXPIRED = 'INVITE_EXPIRED'
+ UNAVAILABLE = 'UNAVAILABLE'
+ INCOMPLETE = 'INCOMPLETE'
+ OPTED_IN = 'OPTED_IN'
+ OPTED_OUT = 'OPTED_OUT'
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Self:
+ """Create an instance of ContactStatus from a JSON string"""
+ return cls(json.loads(json_str))
+
+
diff --git a/symphony/bdk/gen/federation_model/contacts_response.py b/symphony/bdk/gen/federation_model/contacts_response.py
new file mode 100644
index 00000000..f2490f0d
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/contacts_response.py
@@ -0,0 +1,101 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict
+from typing import Any, ClassVar, Dict, List, Optional
+from symphony.bdk.gen.federation_model.add_contact_response import AddContactResponse
+from symphony.bdk.gen.federation_model.pagination import Pagination
+from typing import Optional, Set
+from typing_extensions import Self
+
+class ContactsResponse(BaseModel):
+ """
+ ContactsResponse
+ """ # noqa: E501
+ contacts: Optional[List[AddContactResponse]] = None
+ pagination: Optional[Pagination] = None
+ __properties: ClassVar[List[str]] = ["contacts", "pagination"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of ContactsResponse from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ # override the default output from pydantic by calling `to_dict()` of each item in contacts (list)
+ _items = []
+ if self.contacts:
+ for _item_contacts in self.contacts:
+ if _item_contacts:
+ _items.append(_item_contacts.to_dict())
+ _dict['contacts'] = _items
+ # override the default output from pydantic by calling `to_dict()` of pagination
+ if self.pagination:
+ _dict['pagination'] = self.pagination.to_dict()
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of ContactsResponse from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "contacts": [AddContactResponse.from_dict(_item) for _item in obj["contacts"]] if obj.get("contacts") is not None else None,
+ "pagination": Pagination.from_dict(obj["pagination"]) if obj.get("pagination") is not None else None
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/copy_contact403_response.py b/symphony/bdk/gen/federation_model/copy_contact403_response.py
new file mode 100644
index 00000000..696d3742
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/copy_contact403_response.py
@@ -0,0 +1,137 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import json
+import pprint
+from pydantic import BaseModel, ConfigDict, Field, StrictStr, ValidationError, field_validator
+from typing import Any, List, Optional
+from symphony.bdk.gen.federation_model.forbidden_entitlement_type import ForbiddenEntitlementType
+from symphony.bdk.gen.federation_model.user_copy_not_supported_for_ims import UserCopyNotSupportedForIms
+from pydantic import StrictStr, Field
+from typing import Union, List, Set, Optional, Dict
+from typing_extensions import Literal, Self
+
+COPYCONTACT403RESPONSE_ONE_OF_SCHEMAS = ["ForbiddenEntitlementType", "UserCopyNotSupportedForIms"]
+
+class CopyContact403Response(BaseModel):
+ """
+ CopyContact403Response
+ """
+ # data type: ForbiddenEntitlementType
+ oneof_schema_1_validator: Optional[ForbiddenEntitlementType] = None
+ # data type: UserCopyNotSupportedForIms
+ oneof_schema_2_validator: Optional[UserCopyNotSupportedForIms] = None
+ actual_instance: Optional[Union[ForbiddenEntitlementType, UserCopyNotSupportedForIms]] = None
+ one_of_schemas: Set[str] = { "ForbiddenEntitlementType", "UserCopyNotSupportedForIms" }
+
+ model_config = ConfigDict(
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def __init__(self, *args, **kwargs) -> None:
+ if args:
+ if len(args) > 1:
+ raise ValueError("If a position argument is used, only 1 is allowed to set `actual_instance`")
+ if kwargs:
+ raise ValueError("If a position argument is used, keyword arguments cannot be used.")
+ super().__init__(actual_instance=args[0])
+ else:
+ super().__init__(**kwargs)
+
+ @field_validator('actual_instance')
+ def actual_instance_must_validate_oneof(cls, v):
+ instance = CopyContact403Response.model_construct()
+ error_messages = []
+ match = 0
+ # validate data type: ForbiddenEntitlementType
+ if not isinstance(v, ForbiddenEntitlementType):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `ForbiddenEntitlementType`")
+ else:
+ match += 1
+ # validate data type: UserCopyNotSupportedForIms
+ if not isinstance(v, UserCopyNotSupportedForIms):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `UserCopyNotSupportedForIms`")
+ else:
+ match += 1
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when setting `actual_instance` in CopyContact403Response with oneOf schemas: ForbiddenEntitlementType, UserCopyNotSupportedForIms. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when setting `actual_instance` in CopyContact403Response with oneOf schemas: ForbiddenEntitlementType, UserCopyNotSupportedForIms. Details: " + ", ".join(error_messages))
+ else:
+ return v
+
+ @classmethod
+ def from_dict(cls, obj: Union[str, Dict[str, Any]]) -> Self:
+ return cls.from_json(json.dumps(obj))
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Self:
+ """Returns the object represented by the json string"""
+ instance = cls.model_construct()
+ error_messages = []
+ match = 0
+
+ # deserialize data into ForbiddenEntitlementType
+ try:
+ instance.actual_instance = ForbiddenEntitlementType.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+ # deserialize data into UserCopyNotSupportedForIms
+ try:
+ instance.actual_instance = UserCopyNotSupportedForIms.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when deserializing the JSON string into CopyContact403Response with oneOf schemas: ForbiddenEntitlementType, UserCopyNotSupportedForIms. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when deserializing the JSON string into CopyContact403Response with oneOf schemas: ForbiddenEntitlementType, UserCopyNotSupportedForIms. Details: " + ", ".join(error_messages))
+ else:
+ return instance
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the actual instance"""
+ if self.actual_instance is None:
+ return "null"
+
+ if hasattr(self.actual_instance, "to_json") and callable(self.actual_instance.to_json):
+ return self.actual_instance.to_json()
+ else:
+ return json.dumps(self.actual_instance)
+
+ def to_dict(self) -> Optional[Union[Dict[str, Any], ForbiddenEntitlementType, UserCopyNotSupportedForIms]]:
+ """Returns the dict representation of the actual instance"""
+ if self.actual_instance is None:
+ return None
+
+ if hasattr(self.actual_instance, "to_dict") and callable(self.actual_instance.to_dict):
+ return self.actual_instance.to_dict()
+ else:
+ # primitive type
+ return self.actual_instance
+
+ def to_str(self) -> str:
+ """Returns the string representation of the actual instance"""
+ return pprint.pformat(self.model_dump())
+
+
diff --git a/symphony/bdk/gen/federation_model/copy_contact_failed.py b/symphony/bdk/gen/federation_model/copy_contact_failed.py
new file mode 100644
index 00000000..998ae5c3
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/copy_contact_failed.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class CopyContactFailed(BaseModel):
+ """
+ Unable to copy the contact.
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of CopyContactFailed from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of CopyContactFailed from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/copy_contact_response.py b/symphony/bdk/gen/federation_model/copy_contact_response.py
new file mode 100644
index 00000000..7121ef92
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/copy_contact_response.py
@@ -0,0 +1,89 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, Field, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class CopyContactResponse(BaseModel):
+ """
+ CopyContactResponse
+ """ # noqa: E501
+ new_symphony_id: Optional[StrictStr] = Field(default=None, description="Symphony user ID of the account copy", alias="newSymphonyId")
+ migrated_stream_ids: Optional[List[StrictStr]] = Field(default=None, description="StreamIds of the rooms in which the user's account has been replaced with the account copy.", alias="migratedStreamIds")
+ __properties: ClassVar[List[str]] = ["newSymphonyId", "migratedStreamIds"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of CopyContactResponse from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of CopyContactResponse from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "newSymphonyId": obj.get("newSymphonyId"),
+ "migratedStreamIds": obj.get("migratedStreamIds")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/create_account_failed.py b/symphony/bdk/gen/federation_model/create_account_failed.py
new file mode 100644
index 00000000..48be7ec6
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/create_account_failed.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class CreateAccountFailed(BaseModel):
+ """
+ Gateway microservice cannot create the Symphony account.
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of CreateAccountFailed from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of CreateAccountFailed from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/create_room403_response.py b/symphony/bdk/gen/federation_model/create_room403_response.py
new file mode 100644
index 00000000..c79a4839
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/create_room403_response.py
@@ -0,0 +1,151 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import json
+import pprint
+from pydantic import BaseModel, ConfigDict, Field, StrictStr, ValidationError, field_validator
+from typing import Any, List, Optional
+from symphony.bdk.gen.federation_model.federation_group_emp_forbidden import FederationGroupEmpForbidden
+from symphony.bdk.gen.federation_model.forbidden import Forbidden
+from symphony.bdk.gen.federation_model.inline_response4032 import InlineResponse4032
+from pydantic import StrictStr, Field
+from typing import Union, List, Set, Optional, Dict
+from typing_extensions import Literal, Self
+
+CREATEROOM403RESPONSE_ONE_OF_SCHEMAS = ["FederationGroupEmpForbidden", "Forbidden", "InlineResponse4032"]
+
+class CreateRoom403Response(BaseModel):
+ """
+ CreateRoom403Response
+ """
+ # data type: InlineResponse4032
+ oneof_schema_1_validator: Optional[InlineResponse4032] = None
+ # data type: Forbidden
+ oneof_schema_2_validator: Optional[Forbidden] = None
+ # data type: FederationGroupEmpForbidden
+ oneof_schema_3_validator: Optional[FederationGroupEmpForbidden] = None
+ actual_instance: Optional[Union[FederationGroupEmpForbidden, Forbidden, InlineResponse4032]] = None
+ one_of_schemas: Set[str] = { "FederationGroupEmpForbidden", "Forbidden", "InlineResponse4032" }
+
+ model_config = ConfigDict(
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def __init__(self, *args, **kwargs) -> None:
+ if args:
+ if len(args) > 1:
+ raise ValueError("If a position argument is used, only 1 is allowed to set `actual_instance`")
+ if kwargs:
+ raise ValueError("If a position argument is used, keyword arguments cannot be used.")
+ super().__init__(actual_instance=args[0])
+ else:
+ super().__init__(**kwargs)
+
+ @field_validator('actual_instance')
+ def actual_instance_must_validate_oneof(cls, v):
+ instance = CreateRoom403Response.model_construct()
+ error_messages = []
+ match = 0
+ # validate data type: InlineResponse4032
+ if not isinstance(v, InlineResponse4032):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `InlineResponse4032`")
+ else:
+ match += 1
+ # validate data type: Forbidden
+ if not isinstance(v, Forbidden):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `Forbidden`")
+ else:
+ match += 1
+ # validate data type: FederationGroupEmpForbidden
+ if not isinstance(v, FederationGroupEmpForbidden):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `FederationGroupEmpForbidden`")
+ else:
+ match += 1
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when setting `actual_instance` in CreateRoom403Response with oneOf schemas: FederationGroupEmpForbidden, Forbidden, InlineResponse4032. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when setting `actual_instance` in CreateRoom403Response with oneOf schemas: FederationGroupEmpForbidden, Forbidden, InlineResponse4032. Details: " + ", ".join(error_messages))
+ else:
+ return v
+
+ @classmethod
+ def from_dict(cls, obj: Union[str, Dict[str, Any]]) -> Self:
+ return cls.from_json(json.dumps(obj))
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Self:
+ """Returns the object represented by the json string"""
+ instance = cls.model_construct()
+ error_messages = []
+ match = 0
+
+ # deserialize data into InlineResponse4032
+ try:
+ instance.actual_instance = InlineResponse4032.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+ # deserialize data into Forbidden
+ try:
+ instance.actual_instance = Forbidden.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+ # deserialize data into FederationGroupEmpForbidden
+ try:
+ instance.actual_instance = FederationGroupEmpForbidden.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when deserializing the JSON string into CreateRoom403Response with oneOf schemas: FederationGroupEmpForbidden, Forbidden, InlineResponse4032. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when deserializing the JSON string into CreateRoom403Response with oneOf schemas: FederationGroupEmpForbidden, Forbidden, InlineResponse4032. Details: " + ", ".join(error_messages))
+ else:
+ return instance
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the actual instance"""
+ if self.actual_instance is None:
+ return "null"
+
+ if hasattr(self.actual_instance, "to_json") and callable(self.actual_instance.to_json):
+ return self.actual_instance.to_json()
+ else:
+ return json.dumps(self.actual_instance)
+
+ def to_dict(self) -> Optional[Union[Dict[str, Any], FederationGroupEmpForbidden, Forbidden, InlineResponse4032]]:
+ """Returns the dict representation of the actual instance"""
+ if self.actual_instance is None:
+ return None
+
+ if hasattr(self.actual_instance, "to_dict") and callable(self.actual_instance.to_dict):
+ return self.actual_instance.to_dict()
+ else:
+ # primitive type
+ return self.actual_instance
+
+ def to_str(self) -> str:
+ """Returns the string representation of the actual instance"""
+ return pprint.pformat(self.model_dump())
+
+
diff --git a/symphony/bdk/gen/federation_model/create_room_failed.py b/symphony/bdk/gen/federation_model/create_room_failed.py
new file mode 100644
index 00000000..24659d98
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/create_room_failed.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class CreateRoomFailed(BaseModel):
+ """
+ Gateway microservice cannot create the room.
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of CreateRoomFailed from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of CreateRoomFailed from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/create_roomv2400_response.py b/symphony/bdk/gen/federation_model/create_roomv2400_response.py
new file mode 100644
index 00000000..da626a27
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/create_roomv2400_response.py
@@ -0,0 +1,137 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import json
+import pprint
+from pydantic import BaseModel, ConfigDict, Field, StrictStr, ValidationError, field_validator
+from typing import Any, List, Optional
+from symphony.bdk.gen.federation_model.connection_not_accepted import ConnectionNotAccepted
+from symphony.bdk.gen.federation_model.incompatible_external_network_and_request_body import IncompatibleExternalNetworkAndRequestBody
+from pydantic import StrictStr, Field
+from typing import Union, List, Set, Optional, Dict
+from typing_extensions import Literal, Self
+
+CREATEROOMV2400RESPONSE_ONE_OF_SCHEMAS = ["ConnectionNotAccepted", "IncompatibleExternalNetworkAndRequestBody"]
+
+class CreateRoomv2400Response(BaseModel):
+ """
+ CreateRoomv2400Response
+ """
+ # data type: ConnectionNotAccepted
+ oneof_schema_1_validator: Optional[ConnectionNotAccepted] = None
+ # data type: IncompatibleExternalNetworkAndRequestBody
+ oneof_schema_2_validator: Optional[IncompatibleExternalNetworkAndRequestBody] = None
+ actual_instance: Optional[Union[ConnectionNotAccepted, IncompatibleExternalNetworkAndRequestBody]] = None
+ one_of_schemas: Set[str] = { "ConnectionNotAccepted", "IncompatibleExternalNetworkAndRequestBody" }
+
+ model_config = ConfigDict(
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def __init__(self, *args, **kwargs) -> None:
+ if args:
+ if len(args) > 1:
+ raise ValueError("If a position argument is used, only 1 is allowed to set `actual_instance`")
+ if kwargs:
+ raise ValueError("If a position argument is used, keyword arguments cannot be used.")
+ super().__init__(actual_instance=args[0])
+ else:
+ super().__init__(**kwargs)
+
+ @field_validator('actual_instance')
+ def actual_instance_must_validate_oneof(cls, v):
+ instance = CreateRoomv2400Response.model_construct()
+ error_messages = []
+ match = 0
+ # validate data type: ConnectionNotAccepted
+ if not isinstance(v, ConnectionNotAccepted):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `ConnectionNotAccepted`")
+ else:
+ match += 1
+ # validate data type: IncompatibleExternalNetworkAndRequestBody
+ if not isinstance(v, IncompatibleExternalNetworkAndRequestBody):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `IncompatibleExternalNetworkAndRequestBody`")
+ else:
+ match += 1
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when setting `actual_instance` in CreateRoomv2400Response with oneOf schemas: ConnectionNotAccepted, IncompatibleExternalNetworkAndRequestBody. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when setting `actual_instance` in CreateRoomv2400Response with oneOf schemas: ConnectionNotAccepted, IncompatibleExternalNetworkAndRequestBody. Details: " + ", ".join(error_messages))
+ else:
+ return v
+
+ @classmethod
+ def from_dict(cls, obj: Union[str, Dict[str, Any]]) -> Self:
+ return cls.from_json(json.dumps(obj))
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Self:
+ """Returns the object represented by the json string"""
+ instance = cls.model_construct()
+ error_messages = []
+ match = 0
+
+ # deserialize data into ConnectionNotAccepted
+ try:
+ instance.actual_instance = ConnectionNotAccepted.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+ # deserialize data into IncompatibleExternalNetworkAndRequestBody
+ try:
+ instance.actual_instance = IncompatibleExternalNetworkAndRequestBody.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when deserializing the JSON string into CreateRoomv2400Response with oneOf schemas: ConnectionNotAccepted, IncompatibleExternalNetworkAndRequestBody. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when deserializing the JSON string into CreateRoomv2400Response with oneOf schemas: ConnectionNotAccepted, IncompatibleExternalNetworkAndRequestBody. Details: " + ", ".join(error_messages))
+ else:
+ return instance
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the actual instance"""
+ if self.actual_instance is None:
+ return "null"
+
+ if hasattr(self.actual_instance, "to_json") and callable(self.actual_instance.to_json):
+ return self.actual_instance.to_json()
+ else:
+ return json.dumps(self.actual_instance)
+
+ def to_dict(self) -> Optional[Union[Dict[str, Any], ConnectionNotAccepted, IncompatibleExternalNetworkAndRequestBody]]:
+ """Returns the dict representation of the actual instance"""
+ if self.actual_instance is None:
+ return None
+
+ if hasattr(self.actual_instance, "to_dict") and callable(self.actual_instance.to_dict):
+ return self.actual_instance.to_dict()
+ else:
+ # primitive type
+ return self.actual_instance
+
+ def to_str(self) -> str:
+ """Returns the string representation of the actual instance"""
+ return pprint.pformat(self.model_dump())
+
+
diff --git a/symphony/bdk/gen/federation_model/create_roomv2403_response.py b/symphony/bdk/gen/federation_model/create_roomv2403_response.py
new file mode 100644
index 00000000..53133178
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/create_roomv2403_response.py
@@ -0,0 +1,165 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import json
+import pprint
+from pydantic import BaseModel, ConfigDict, Field, StrictStr, ValidationError, field_validator
+from typing import Any, List, Optional
+from symphony.bdk.gen.federation_model.federation_group_emp_forbidden import FederationGroupEmpForbidden
+from symphony.bdk.gen.federation_model.forbidden import Forbidden
+from symphony.bdk.gen.federation_model.inline_response4032 import InlineResponse4032
+from symphony.bdk.gen.federation_model.user_id_mismatch import UserIdMismatch
+from pydantic import StrictStr, Field
+from typing import Union, List, Set, Optional, Dict
+from typing_extensions import Literal, Self
+
+CREATEROOMV2403RESPONSE_ONE_OF_SCHEMAS = ["FederationGroupEmpForbidden", "Forbidden", "InlineResponse4032", "UserIdMismatch"]
+
+class CreateRoomv2403Response(BaseModel):
+ """
+ CreateRoomv2403Response
+ """
+ # data type: InlineResponse4032
+ oneof_schema_1_validator: Optional[InlineResponse4032] = None
+ # data type: Forbidden
+ oneof_schema_2_validator: Optional[Forbidden] = None
+ # data type: FederationGroupEmpForbidden
+ oneof_schema_3_validator: Optional[FederationGroupEmpForbidden] = None
+ # data type: UserIdMismatch
+ oneof_schema_4_validator: Optional[UserIdMismatch] = None
+ actual_instance: Optional[Union[FederationGroupEmpForbidden, Forbidden, InlineResponse4032, UserIdMismatch]] = None
+ one_of_schemas: Set[str] = { "FederationGroupEmpForbidden", "Forbidden", "InlineResponse4032", "UserIdMismatch" }
+
+ model_config = ConfigDict(
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def __init__(self, *args, **kwargs) -> None:
+ if args:
+ if len(args) > 1:
+ raise ValueError("If a position argument is used, only 1 is allowed to set `actual_instance`")
+ if kwargs:
+ raise ValueError("If a position argument is used, keyword arguments cannot be used.")
+ super().__init__(actual_instance=args[0])
+ else:
+ super().__init__(**kwargs)
+
+ @field_validator('actual_instance')
+ def actual_instance_must_validate_oneof(cls, v):
+ instance = CreateRoomv2403Response.model_construct()
+ error_messages = []
+ match = 0
+ # validate data type: InlineResponse4032
+ if not isinstance(v, InlineResponse4032):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `InlineResponse4032`")
+ else:
+ match += 1
+ # validate data type: Forbidden
+ if not isinstance(v, Forbidden):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `Forbidden`")
+ else:
+ match += 1
+ # validate data type: FederationGroupEmpForbidden
+ if not isinstance(v, FederationGroupEmpForbidden):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `FederationGroupEmpForbidden`")
+ else:
+ match += 1
+ # validate data type: UserIdMismatch
+ if not isinstance(v, UserIdMismatch):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `UserIdMismatch`")
+ else:
+ match += 1
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when setting `actual_instance` in CreateRoomv2403Response with oneOf schemas: FederationGroupEmpForbidden, Forbidden, InlineResponse4032, UserIdMismatch. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when setting `actual_instance` in CreateRoomv2403Response with oneOf schemas: FederationGroupEmpForbidden, Forbidden, InlineResponse4032, UserIdMismatch. Details: " + ", ".join(error_messages))
+ else:
+ return v
+
+ @classmethod
+ def from_dict(cls, obj: Union[str, Dict[str, Any]]) -> Self:
+ return cls.from_json(json.dumps(obj))
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Self:
+ """Returns the object represented by the json string"""
+ instance = cls.model_construct()
+ error_messages = []
+ match = 0
+
+ # deserialize data into InlineResponse4032
+ try:
+ instance.actual_instance = InlineResponse4032.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+ # deserialize data into Forbidden
+ try:
+ instance.actual_instance = Forbidden.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+ # deserialize data into FederationGroupEmpForbidden
+ try:
+ instance.actual_instance = FederationGroupEmpForbidden.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+ # deserialize data into UserIdMismatch
+ try:
+ instance.actual_instance = UserIdMismatch.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when deserializing the JSON string into CreateRoomv2403Response with oneOf schemas: FederationGroupEmpForbidden, Forbidden, InlineResponse4032, UserIdMismatch. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when deserializing the JSON string into CreateRoomv2403Response with oneOf schemas: FederationGroupEmpForbidden, Forbidden, InlineResponse4032, UserIdMismatch. Details: " + ", ".join(error_messages))
+ else:
+ return instance
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the actual instance"""
+ if self.actual_instance is None:
+ return "null"
+
+ if hasattr(self.actual_instance, "to_json") and callable(self.actual_instance.to_json):
+ return self.actual_instance.to_json()
+ else:
+ return json.dumps(self.actual_instance)
+
+ def to_dict(self) -> Optional[Union[Dict[str, Any], FederationGroupEmpForbidden, Forbidden, InlineResponse4032, UserIdMismatch]]:
+ """Returns the dict representation of the actual instance"""
+ if self.actual_instance is None:
+ return None
+
+ if hasattr(self.actual_instance, "to_dict") and callable(self.actual_instance.to_dict):
+ return self.actual_instance.to_dict()
+ else:
+ # primitive type
+ return self.actual_instance
+
+ def to_str(self) -> str:
+ """Returns the string representation of the actual instance"""
+ return pprint.pformat(self.model_dump())
+
+
diff --git a/symphony/bdk/gen/federation_model/create_roomv2404_response.py b/symphony/bdk/gen/federation_model/create_roomv2404_response.py
new file mode 100644
index 00000000..23eea4e4
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/create_roomv2404_response.py
@@ -0,0 +1,137 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import json
+import pprint
+from pydantic import BaseModel, ConfigDict, Field, StrictStr, ValidationError, field_validator
+from typing import Any, List, Optional
+from symphony.bdk.gen.federation_model.federation_group_not_found import FederationGroupNotFound
+from symphony.bdk.gen.federation_model.inline_response4047 import InlineResponse4047
+from pydantic import StrictStr, Field
+from typing import Union, List, Set, Optional, Dict
+from typing_extensions import Literal, Self
+
+CREATEROOMV2404RESPONSE_ONE_OF_SCHEMAS = ["FederationGroupNotFound", "InlineResponse4047"]
+
+class CreateRoomv2404Response(BaseModel):
+ """
+ CreateRoomv2404Response
+ """
+ # data type: InlineResponse4047
+ oneof_schema_1_validator: Optional[InlineResponse4047] = None
+ # data type: FederationGroupNotFound
+ oneof_schema_2_validator: Optional[FederationGroupNotFound] = None
+ actual_instance: Optional[Union[FederationGroupNotFound, InlineResponse4047]] = None
+ one_of_schemas: Set[str] = { "FederationGroupNotFound", "InlineResponse4047" }
+
+ model_config = ConfigDict(
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def __init__(self, *args, **kwargs) -> None:
+ if args:
+ if len(args) > 1:
+ raise ValueError("If a position argument is used, only 1 is allowed to set `actual_instance`")
+ if kwargs:
+ raise ValueError("If a position argument is used, keyword arguments cannot be used.")
+ super().__init__(actual_instance=args[0])
+ else:
+ super().__init__(**kwargs)
+
+ @field_validator('actual_instance')
+ def actual_instance_must_validate_oneof(cls, v):
+ instance = CreateRoomv2404Response.model_construct()
+ error_messages = []
+ match = 0
+ # validate data type: InlineResponse4047
+ if not isinstance(v, InlineResponse4047):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `InlineResponse4047`")
+ else:
+ match += 1
+ # validate data type: FederationGroupNotFound
+ if not isinstance(v, FederationGroupNotFound):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `FederationGroupNotFound`")
+ else:
+ match += 1
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when setting `actual_instance` in CreateRoomv2404Response with oneOf schemas: FederationGroupNotFound, InlineResponse4047. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when setting `actual_instance` in CreateRoomv2404Response with oneOf schemas: FederationGroupNotFound, InlineResponse4047. Details: " + ", ".join(error_messages))
+ else:
+ return v
+
+ @classmethod
+ def from_dict(cls, obj: Union[str, Dict[str, Any]]) -> Self:
+ return cls.from_json(json.dumps(obj))
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Self:
+ """Returns the object represented by the json string"""
+ instance = cls.model_construct()
+ error_messages = []
+ match = 0
+
+ # deserialize data into InlineResponse4047
+ try:
+ instance.actual_instance = InlineResponse4047.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+ # deserialize data into FederationGroupNotFound
+ try:
+ instance.actual_instance = FederationGroupNotFound.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when deserializing the JSON string into CreateRoomv2404Response with oneOf schemas: FederationGroupNotFound, InlineResponse4047. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when deserializing the JSON string into CreateRoomv2404Response with oneOf schemas: FederationGroupNotFound, InlineResponse4047. Details: " + ", ".join(error_messages))
+ else:
+ return instance
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the actual instance"""
+ if self.actual_instance is None:
+ return "null"
+
+ if hasattr(self.actual_instance, "to_json") and callable(self.actual_instance.to_json):
+ return self.actual_instance.to_json()
+ else:
+ return json.dumps(self.actual_instance)
+
+ def to_dict(self) -> Optional[Union[Dict[str, Any], FederationGroupNotFound, InlineResponse4047]]:
+ """Returns the dict representation of the actual instance"""
+ if self.actual_instance is None:
+ return None
+
+ if hasattr(self.actual_instance, "to_dict") and callable(self.actual_instance.to_dict):
+ return self.actual_instance.to_dict()
+ else:
+ # primitive type
+ return self.actual_instance
+
+ def to_str(self) -> str:
+ """Returns the string representation of the actual instance"""
+ return pprint.pformat(self.model_dump())
+
+
diff --git a/symphony/bdk/gen/federation_model/current_tenant_has_own_user_copy.py b/symphony/bdk/gen/federation_model/current_tenant_has_own_user_copy.py
new file mode 100644
index 00000000..8a6d0213
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/current_tenant_has_own_user_copy.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class CurrentTenantHasOwnUserCopy(BaseModel):
+ """
+ Tenant requesting the contact copy already has its own copy of the contact. The copy contact action is not required.
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of CurrentTenantHasOwnUserCopy from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of CurrentTenantHasOwnUserCopy from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/cursors.py b/symphony/bdk/gen/federation_model/cursors.py
new file mode 100644
index 00000000..f044b4e2
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/cursors.py
@@ -0,0 +1,89 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class Cursors(BaseModel):
+ """
+ Cursors
+ """ # noqa: E501
+ before: Optional[StrictStr] = None
+ after: Optional[StrictStr] = None
+ __properties: ClassVar[List[str]] = ["before", "after"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of Cursors from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of Cursors from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "before": obj.get("before"),
+ "after": obj.get("after")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/customer_block_phone_numbers_item_request.py b/symphony/bdk/gen/federation_model/customer_block_phone_numbers_item_request.py
new file mode 100644
index 00000000..0c716c0e
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/customer_block_phone_numbers_item_request.py
@@ -0,0 +1,92 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, Field, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from symphony.bdk.gen.federation_model.blocking_reason_enum import BlockingReasonEnum
+from typing import Optional, Set
+from typing_extensions import Self
+
+class CustomerBlockPhoneNumbersItemRequest(BaseModel):
+ """
+ CustomerBlockPhoneNumbersItemRequest
+ """ # noqa: E501
+ phone_number: StrictStr = Field(alias="phoneNumber")
+ reason: BlockingReasonEnum
+ comment: Optional[StrictStr] = None
+ __properties: ClassVar[List[str]] = ["phoneNumber", "reason", "comment"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of CustomerBlockPhoneNumbersItemRequest from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of CustomerBlockPhoneNumbersItemRequest from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "phoneNumber": obj.get("phoneNumber"),
+ "reason": obj.get("reason"),
+ "comment": obj.get("comment")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/customer_block_phone_numbers_item_response.py b/symphony/bdk/gen/federation_model/customer_block_phone_numbers_item_response.py
new file mode 100644
index 00000000..816932c5
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/customer_block_phone_numbers_item_response.py
@@ -0,0 +1,95 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from symphony.bdk.gen.federation_model.bulk_item_error import BulkItemError
+from typing import Optional, Set
+from typing_extensions import Self
+
+class CustomerBlockPhoneNumbersItemResponse(BaseModel):
+ """
+ CustomerBlockPhoneNumbersItemResponse
+ """ # noqa: E501
+ phone_number: Optional[StrictStr] = Field(default=None, alias="phoneNumber")
+ status: Optional[StrictInt] = None
+ error: Optional[BulkItemError] = None
+ __properties: ClassVar[List[str]] = ["phoneNumber", "status", "error"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of CustomerBlockPhoneNumbersItemResponse from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ # override the default output from pydantic by calling `to_dict()` of error
+ if self.error:
+ _dict['error'] = self.error.to_dict()
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of CustomerBlockPhoneNumbersItemResponse from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "phoneNumber": obj.get("phoneNumber"),
+ "status": obj.get("status"),
+ "error": BulkItemError.from_dict(obj["error"]) if obj.get("error") is not None else None
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/customer_block_phone_numbers_request.py b/symphony/bdk/gen/federation_model/customer_block_phone_numbers_request.py
new file mode 100644
index 00000000..5bc1fed2
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/customer_block_phone_numbers_request.py
@@ -0,0 +1,96 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, Field
+from typing import Any, ClassVar, Dict, List
+from typing_extensions import Annotated
+from symphony.bdk.gen.federation_model.customer_block_phone_numbers_item_request import CustomerBlockPhoneNumbersItemRequest
+from typing import Optional, Set
+from typing_extensions import Self
+
+class CustomerBlockPhoneNumbersRequest(BaseModel):
+ """
+ CustomerBlockPhoneNumbersRequest
+ """ # noqa: E501
+ phone_numbers: Annotated[List[CustomerBlockPhoneNumbersItemRequest], Field(min_length=1, max_length=100)] = Field(alias="phoneNumbers")
+ __properties: ClassVar[List[str]] = ["phoneNumbers"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of CustomerBlockPhoneNumbersRequest from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ # override the default output from pydantic by calling `to_dict()` of each item in phone_numbers (list)
+ _items = []
+ if self.phone_numbers:
+ for _item_phone_numbers in self.phone_numbers:
+ if _item_phone_numbers:
+ _items.append(_item_phone_numbers.to_dict())
+ _dict['phoneNumbers'] = _items
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of CustomerBlockPhoneNumbersRequest from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "phoneNumbers": [CustomerBlockPhoneNumbersItemRequest.from_dict(_item) for _item in obj["phoneNumbers"]] if obj.get("phoneNumbers") is not None else None
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/customer_block_phone_numbers_response.py b/symphony/bdk/gen/federation_model/customer_block_phone_numbers_response.py
new file mode 100644
index 00000000..7c22f7ce
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/customer_block_phone_numbers_response.py
@@ -0,0 +1,95 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, Field
+from typing import Any, ClassVar, Dict, List, Optional
+from symphony.bdk.gen.federation_model.customer_block_phone_numbers_item_response import CustomerBlockPhoneNumbersItemResponse
+from typing import Optional, Set
+from typing_extensions import Self
+
+class CustomerBlockPhoneNumbersResponse(BaseModel):
+ """
+ CustomerBlockPhoneNumbersResponse
+ """ # noqa: E501
+ phone_numbers: Optional[List[CustomerBlockPhoneNumbersItemResponse]] = Field(default=None, alias="phoneNumbers")
+ __properties: ClassVar[List[str]] = ["phoneNumbers"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of CustomerBlockPhoneNumbersResponse from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ # override the default output from pydantic by calling `to_dict()` of each item in phone_numbers (list)
+ _items = []
+ if self.phone_numbers:
+ for _item_phone_numbers in self.phone_numbers:
+ if _item_phone_numbers:
+ _items.append(_item_phone_numbers.to_dict())
+ _dict['phoneNumbers'] = _items
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of CustomerBlockPhoneNumbersResponse from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "phoneNumbers": [CustomerBlockPhoneNumbersItemResponse.from_dict(_item) for _item in obj["phoneNumbers"]] if obj.get("phoneNumbers") is not None else None
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/customer_contact_request.py b/symphony/bdk/gen/federation_model/customer_contact_request.py
new file mode 100644
index 00000000..454e038e
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/customer_contact_request.py
@@ -0,0 +1,108 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional, Union
+from typing_extensions import Annotated
+from typing import Optional, Set
+from typing_extensions import Self
+
+class CustomerContactRequest(BaseModel):
+ """
+ CustomerContactRequest
+ """ # noqa: E501
+ first_name: StrictStr = Field(alias="firstName")
+ last_name: StrictStr = Field(alias="lastName")
+ company_name: Optional[Annotated[str, Field(strict=True, max_length=100)]] = Field(default=None, description="For SMS, LINE, WHATSAPP and WECHAT, the companyName is mandatory", alias="companyName")
+ email_address: Optional[StrictStr] = Field(default=None, description="For SMS, LINE, WHATSAPP and WECHAT, the emailAddress is mandatory", alias="emailAddress")
+ phone_number: StrictStr = Field(alias="phoneNumber")
+ external_network: StrictStr = Field(description="External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE", alias="externalNetwork")
+ advisor_symphony_ids: Optional[List[Union[Annotated[float, Field(strict=True)], Annotated[int, Field(strict=True)]]]] = Field(default=None, description="A list of Symphony user IDs of the advisors to add the contact to.", alias="advisorSymphonyIds")
+ preferred_language: Optional[StrictStr] = Field(default=None, description="Contact preferred language code", alias="preferredLanguage")
+ advisor_email_addresses: Optional[List[StrictStr]] = Field(default=None, description="A list of email addresses of the advisor to whom the contact is to be added. For WeChat, an \"onboarder\" is an advisor with the permission \"create:contact\". For WhatsApp, SMS, SMS Direct and LINE, the permission is set by default.", alias="advisorEmailAddresses")
+ onboarder_email_address: StrictStr = Field(description="If both advisorSymphonyIds and advisorEmailAddresses are empty, the contact will be added to the onboarder with this email address.", alias="onboarderEmailAddress")
+ create_room: Optional[StrictBool] = Field(default=None, description="Can be set to false in order to prevent the room creation when onboarding a contact on SMS Direct or WhatsApp Direct. This parameter can't be set to true for WhatsApp, SMS, Wechat and LINE for now.", alias="createRoom")
+ __properties: ClassVar[List[str]] = ["firstName", "lastName", "companyName", "emailAddress", "phoneNumber", "externalNetwork", "advisorSymphonyIds", "preferredLanguage", "advisorEmailAddresses", "onboarderEmailAddress", "createRoom"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of CustomerContactRequest from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of CustomerContactRequest from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "firstName": obj.get("firstName"),
+ "lastName": obj.get("lastName"),
+ "companyName": obj.get("companyName"),
+ "emailAddress": obj.get("emailAddress"),
+ "phoneNumber": obj.get("phoneNumber"),
+ "externalNetwork": obj.get("externalNetwork"),
+ "advisorSymphonyIds": obj.get("advisorSymphonyIds"),
+ "preferredLanguage": obj.get("preferredLanguage"),
+ "advisorEmailAddresses": obj.get("advisorEmailAddresses"),
+ "onboarderEmailAddress": obj.get("onboarderEmailAddress"),
+ "createRoom": obj.get("createRoom")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/customer_contact_with_id.py b/symphony/bdk/gen/federation_model/customer_contact_with_id.py
new file mode 100644
index 00000000..2465bb9a
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/customer_contact_with_id.py
@@ -0,0 +1,93 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, Field, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class CustomerContactWithId(BaseModel):
+ """
+ CustomerContactWithId
+ """ # noqa: E501
+ advisor_symphony_id: Optional[StrictStr] = Field(default=None, alias="advisorSymphonyId")
+ advisor_email_address: Optional[StrictStr] = Field(default=None, alias="advisorEmailAddress")
+ contact_email_address: Optional[StrictStr] = Field(default=None, alias="contactEmailAddress")
+ external_network: Optional[StrictStr] = Field(default=None, alias="externalNetwork")
+ __properties: ClassVar[List[str]] = ["advisorSymphonyId", "advisorEmailAddress", "contactEmailAddress", "externalNetwork"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of CustomerContactWithId from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of CustomerContactWithId from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "advisorSymphonyId": obj.get("advisorSymphonyId"),
+ "advisorEmailAddress": obj.get("advisorEmailAddress"),
+ "contactEmailAddress": obj.get("contactEmailAddress"),
+ "externalNetwork": obj.get("externalNetwork")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/customer_contact_with_id_response.py b/symphony/bdk/gen/federation_model/customer_contact_with_id_response.py
new file mode 100644
index 00000000..815770c4
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/customer_contact_with_id_response.py
@@ -0,0 +1,94 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict
+from typing import Any, ClassVar, Dict, List, Optional
+from symphony.bdk.gen.federation_model.bulk_removal_status import BulkRemovalStatus
+from symphony.bdk.gen.federation_model.customer_contact_with_id import CustomerContactWithId
+from typing import Optional, Set
+from typing_extensions import Self
+
+class CustomerContactWithIdResponse(BaseModel):
+ """
+ CustomerContactWithIdResponse
+ """ # noqa: E501
+ contact: Optional[CustomerContactWithId] = None
+ status: Optional[BulkRemovalStatus] = None
+ __properties: ClassVar[List[str]] = ["contact", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of CustomerContactWithIdResponse from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ # override the default output from pydantic by calling `to_dict()` of contact
+ if self.contact:
+ _dict['contact'] = self.contact.to_dict()
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of CustomerContactWithIdResponse from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "contact": CustomerContactWithId.from_dict(obj["contact"]) if obj.get("contact") is not None else None,
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/customer_contact_with_id_responsev2.py b/symphony/bdk/gen/federation_model/customer_contact_with_id_responsev2.py
new file mode 100644
index 00000000..dd7cf090
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/customer_contact_with_id_responsev2.py
@@ -0,0 +1,94 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict
+from typing import Any, ClassVar, Dict, List, Optional
+from symphony.bdk.gen.federation_model.bulk_removal_status import BulkRemovalStatus
+from symphony.bdk.gen.federation_model.customer_contact_with_idv2 import CustomerContactWithIdv2
+from typing import Optional, Set
+from typing_extensions import Self
+
+class CustomerContactWithIdResponsev2(BaseModel):
+ """
+ CustomerContactWithIdResponsev2
+ """ # noqa: E501
+ contact: Optional[CustomerContactWithIdv2] = None
+ status: Optional[BulkRemovalStatus] = None
+ __properties: ClassVar[List[str]] = ["contact", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of CustomerContactWithIdResponsev2 from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ # override the default output from pydantic by calling `to_dict()` of contact
+ if self.contact:
+ _dict['contact'] = self.contact.to_dict()
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of CustomerContactWithIdResponsev2 from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "contact": CustomerContactWithIdv2.from_dict(obj["contact"]) if obj.get("contact") is not None else None,
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/customer_contact_with_idv2.py b/symphony/bdk/gen/federation_model/customer_contact_with_idv2.py
new file mode 100644
index 00000000..db76ab9b
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/customer_contact_with_idv2.py
@@ -0,0 +1,87 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, Field, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class CustomerContactWithIdv2(BaseModel):
+ """
+ CustomerContactWithIdv2
+ """ # noqa: E501
+ advisor_symphony_id: Optional[StrictStr] = Field(default=None, alias="advisorSymphonyId")
+ __properties: ClassVar[List[str]] = ["advisorSymphonyId"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of CustomerContactWithIdv2 from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of CustomerContactWithIdv2 from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "advisorSymphonyId": obj.get("advisorSymphonyId")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/customer_contacts_with_id_response.py b/symphony/bdk/gen/federation_model/customer_contacts_with_id_response.py
new file mode 100644
index 00000000..e0ca7ec1
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/customer_contacts_with_id_response.py
@@ -0,0 +1,95 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict
+from typing import Any, ClassVar, Dict, List, Optional
+from symphony.bdk.gen.federation_model.customer_contact_with_id_response import CustomerContactWithIdResponse
+from typing import Optional, Set
+from typing_extensions import Self
+
+class CustomerContactsWithIdResponse(BaseModel):
+ """
+ CustomerContactsWithIdResponse
+ """ # noqa: E501
+ report: Optional[List[CustomerContactWithIdResponse]] = None
+ __properties: ClassVar[List[str]] = ["report"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of CustomerContactsWithIdResponse from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ # override the default output from pydantic by calling `to_dict()` of each item in report (list)
+ _items = []
+ if self.report:
+ for _item_report in self.report:
+ if _item_report:
+ _items.append(_item_report.to_dict())
+ _dict['report'] = _items
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of CustomerContactsWithIdResponse from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "report": [CustomerContactWithIdResponse.from_dict(_item) for _item in obj["report"]] if obj.get("report") is not None else None
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/customer_contacts_with_id_responsev2.py b/symphony/bdk/gen/federation_model/customer_contacts_with_id_responsev2.py
new file mode 100644
index 00000000..6621a78c
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/customer_contacts_with_id_responsev2.py
@@ -0,0 +1,95 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict
+from typing import Any, ClassVar, Dict, List, Optional
+from symphony.bdk.gen.federation_model.customer_contact_with_id_responsev2 import CustomerContactWithIdResponsev2
+from typing import Optional, Set
+from typing_extensions import Self
+
+class CustomerContactsWithIdResponsev2(BaseModel):
+ """
+ CustomerContactsWithIdResponsev2
+ """ # noqa: E501
+ report: Optional[List[CustomerContactWithIdResponsev2]] = None
+ __properties: ClassVar[List[str]] = ["report"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of CustomerContactsWithIdResponsev2 from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ # override the default output from pydantic by calling `to_dict()` of each item in report (list)
+ _items = []
+ if self.report:
+ for _item_report in self.report:
+ if _item_report:
+ _items.append(_item_report.to_dict())
+ _dict['report'] = _items
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of CustomerContactsWithIdResponsev2 from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "report": [CustomerContactWithIdResponsev2.from_dict(_item) for _item in obj["report"]] if obj.get("report") is not None else None
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/customer_delete_advisor_contact_contact.py b/symphony/bdk/gen/federation_model/customer_delete_advisor_contact_contact.py
new file mode 100644
index 00000000..45b4c94e
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/customer_delete_advisor_contact_contact.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, Field, StrictStr
+from typing import Any, ClassVar, Dict, List
+from typing import Optional, Set
+from typing_extensions import Self
+
+class CustomerDeleteAdvisorContactContact(BaseModel):
+ """
+ CustomerDeleteAdvisorContactContact
+ """ # noqa: E501
+ advisor_symphony_id: StrictStr = Field(alias="advisorSymphonyId")
+ phone_number: StrictStr = Field(alias="phoneNumber")
+ external_network: StrictStr = Field(alias="externalNetwork")
+ __properties: ClassVar[List[str]] = ["advisorSymphonyId", "phoneNumber", "externalNetwork"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of CustomerDeleteAdvisorContactContact from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of CustomerDeleteAdvisorContactContact from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "advisorSymphonyId": obj.get("advisorSymphonyId"),
+ "phoneNumber": obj.get("phoneNumber"),
+ "externalNetwork": obj.get("externalNetwork")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/customer_delete_advisor_contact_responsev2.py b/symphony/bdk/gen/federation_model/customer_delete_advisor_contact_responsev2.py
new file mode 100644
index 00000000..77bc8507
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/customer_delete_advisor_contact_responsev2.py
@@ -0,0 +1,94 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict
+from typing import Any, ClassVar, Dict, List, Optional
+from symphony.bdk.gen.federation_model.bulk_removal_status import BulkRemovalStatus
+from symphony.bdk.gen.federation_model.customer_delete_advisor_contact_contact import CustomerDeleteAdvisorContactContact
+from typing import Optional, Set
+from typing_extensions import Self
+
+class CustomerDeleteAdvisorContactResponsev2(BaseModel):
+ """
+ CustomerDeleteAdvisorContactResponsev2
+ """ # noqa: E501
+ contact: Optional[CustomerDeleteAdvisorContactContact] = None
+ status: Optional[BulkRemovalStatus] = None
+ __properties: ClassVar[List[str]] = ["contact", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of CustomerDeleteAdvisorContactResponsev2 from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ # override the default output from pydantic by calling `to_dict()` of contact
+ if self.contact:
+ _dict['contact'] = self.contact.to_dict()
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of CustomerDeleteAdvisorContactResponsev2 from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "contact": CustomerDeleteAdvisorContactContact.from_dict(obj["contact"]) if obj.get("contact") is not None else None,
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/customer_delete_advisor_contacts_responsev2.py b/symphony/bdk/gen/federation_model/customer_delete_advisor_contacts_responsev2.py
new file mode 100644
index 00000000..f36cd5f8
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/customer_delete_advisor_contacts_responsev2.py
@@ -0,0 +1,95 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict
+from typing import Any, ClassVar, Dict, List, Optional
+from symphony.bdk.gen.federation_model.customer_delete_advisor_contact_responsev2 import CustomerDeleteAdvisorContactResponsev2
+from typing import Optional, Set
+from typing_extensions import Self
+
+class CustomerDeleteAdvisorContactsResponsev2(BaseModel):
+ """
+ CustomerDeleteAdvisorContactsResponsev2
+ """ # noqa: E501
+ report: Optional[List[CustomerDeleteAdvisorContactResponsev2]] = None
+ __properties: ClassVar[List[str]] = ["report"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of CustomerDeleteAdvisorContactsResponsev2 from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ # override the default output from pydantic by calling `to_dict()` of each item in report (list)
+ _items = []
+ if self.report:
+ for _item_report in self.report:
+ if _item_report:
+ _items.append(_item_report.to_dict())
+ _dict['report'] = _items
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of CustomerDeleteAdvisorContactsResponsev2 from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "report": [CustomerDeleteAdvisorContactResponsev2.from_dict(_item) for _item in obj["report"]] if obj.get("report") is not None else None
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/customer_unblock_phone_numbers_request.py b/symphony/bdk/gen/federation_model/customer_unblock_phone_numbers_request.py
new file mode 100644
index 00000000..63b8af43
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/customer_unblock_phone_numbers_request.py
@@ -0,0 +1,87 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, Field, StrictStr
+from typing import Any, ClassVar, Dict, List
+from typing import Optional, Set
+from typing_extensions import Self
+
+class CustomerUnblockPhoneNumbersRequest(BaseModel):
+ """
+ CustomerUnblockPhoneNumbersRequest
+ """ # noqa: E501
+ phone_numbers: StrictStr = Field(alias="phoneNumbers")
+ __properties: ClassVar[List[str]] = ["phoneNumbers"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of CustomerUnblockPhoneNumbersRequest from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of CustomerUnblockPhoneNumbersRequest from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "phoneNumbers": obj.get("phoneNumbers")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/customer_update_contacts_request.py b/symphony/bdk/gen/federation_model/customer_update_contacts_request.py
new file mode 100644
index 00000000..1f6a3646
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/customer_update_contacts_request.py
@@ -0,0 +1,98 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, Field, StrictStr
+from typing import Any, ClassVar, Dict, List
+from typing_extensions import Annotated
+from typing import Optional, Set
+from typing_extensions import Self
+
+class CustomerUpdateContactsRequest(BaseModel):
+ """
+ CustomerUpdateContactsRequest
+ """ # noqa: E501
+ first_name: StrictStr = Field(alias="firstName")
+ last_name: StrictStr = Field(alias="lastName")
+ company_name: Annotated[str, Field(strict=True, max_length=100)] = Field(alias="companyName")
+ phone_number: StrictStr = Field(alias="phoneNumber")
+ external_network: StrictStr = Field(description="WHATSAPP", alias="externalNetwork")
+ advisor_email_address: StrictStr = Field(alias="advisorEmailAddress")
+ __properties: ClassVar[List[str]] = ["firstName", "lastName", "companyName", "phoneNumber", "externalNetwork", "advisorEmailAddress"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of CustomerUpdateContactsRequest from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of CustomerUpdateContactsRequest from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "firstName": obj.get("firstName"),
+ "lastName": obj.get("lastName"),
+ "companyName": obj.get("companyName"),
+ "phoneNumber": obj.get("phoneNumber"),
+ "externalNetwork": obj.get("externalNetwork"),
+ "advisorEmailAddress": obj.get("advisorEmailAddress")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/customer_update_contacts_requestv2.py b/symphony/bdk/gen/federation_model/customer_update_contacts_requestv2.py
new file mode 100644
index 00000000..c4b7d49c
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/customer_update_contacts_requestv2.py
@@ -0,0 +1,107 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, Field, StrictStr, field_validator
+from typing import Any, ClassVar, Dict, List, Optional
+from typing_extensions import Annotated
+from typing import Optional, Set
+from typing_extensions import Self
+
+class CustomerUpdateContactsRequestv2(BaseModel):
+ """
+ CustomerUpdateContactsRequestv2
+ """ # noqa: E501
+ first_name: StrictStr = Field(alias="firstName")
+ last_name: StrictStr = Field(alias="lastName")
+ company_name: Annotated[str, Field(strict=True, max_length=100)] = Field(alias="companyName")
+ phone_number: StrictStr = Field(alias="phoneNumber")
+ email_address: Optional[StrictStr] = Field(default=None, alias="emailAddress")
+ advisor_symphony_id: Annotated[str, Field(strict=True)] = Field(alias="advisorSymphonyId")
+ preferred_language: Optional[StrictStr] = Field(default=None, description="Contact preferred language. Refer to contact preferred language section at the beginning of this documentation for valid language name.", alias="preferredLanguage")
+ __properties: ClassVar[List[str]] = ["firstName", "lastName", "companyName", "phoneNumber", "emailAddress", "advisorSymphonyId", "preferredLanguage"]
+
+ @field_validator('advisor_symphony_id')
+ def advisor_symphony_id_validate_regular_expression(cls, value):
+ """Validates the regular expression"""
+ if not re.match(r"^\d+$", value):
+ raise ValueError(r"must validate the regular expression /^\d+$/")
+ return value
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of CustomerUpdateContactsRequestv2 from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of CustomerUpdateContactsRequestv2 from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "firstName": obj.get("firstName"),
+ "lastName": obj.get("lastName"),
+ "companyName": obj.get("companyName"),
+ "phoneNumber": obj.get("phoneNumber"),
+ "emailAddress": obj.get("emailAddress"),
+ "advisorSymphonyId": obj.get("advisorSymphonyId"),
+ "preferredLanguage": obj.get("preferredLanguage")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/delete_contact_request.py b/symphony/bdk/gen/federation_model/delete_contact_request.py
new file mode 100644
index 00000000..695623e8
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/delete_contact_request.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, Field, StrictStr
+from typing import Any, ClassVar, Dict, List
+from typing import Optional, Set
+from typing_extensions import Self
+
+class DeleteContactRequest(BaseModel):
+ """
+ DeleteContactRequest
+ """ # noqa: E501
+ advisor_email_address: StrictStr = Field(alias="advisorEmailAddress")
+ contact_email_address: StrictStr = Field(alias="contactEmailAddress")
+ external_network: StrictStr = Field(description="External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE", alias="externalNetwork")
+ __properties: ClassVar[List[str]] = ["advisorEmailAddress", "contactEmailAddress", "externalNetwork"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of DeleteContactRequest from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of DeleteContactRequest from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "advisorEmailAddress": obj.get("advisorEmailAddress"),
+ "contactEmailAddress": obj.get("contactEmailAddress"),
+ "externalNetwork": obj.get("externalNetwork")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/delete_contact_requestv2.py b/symphony/bdk/gen/federation_model/delete_contact_requestv2.py
new file mode 100644
index 00000000..53eee6e4
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/delete_contact_requestv2.py
@@ -0,0 +1,90 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from decimal import Decimal
+from pydantic import BaseModel, ConfigDict, Field, StrictStr
+from typing import Any, ClassVar, Dict, List
+from typing import Optional, Set
+from typing_extensions import Self
+
+class DeleteContactRequestv2(BaseModel):
+ """
+ DeleteContactRequestv2
+ """ # noqa: E501
+ advisor_symphony_id: StrictStr = Field(alias="advisorSymphonyId")
+ contact_symphony_id: Decimal = Field(alias="contactSymphonyId")
+ __properties: ClassVar[List[str]] = ["advisorSymphonyId", "contactSymphonyId"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of DeleteContactRequestv2 from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of DeleteContactRequestv2 from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "advisorSymphonyId": obj.get("advisorSymphonyId"),
+ "contactSymphonyId": obj.get("contactSymphonyId")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/delete_contact_response.py b/symphony/bdk/gen/federation_model/delete_contact_response.py
new file mode 100644
index 00000000..f5238d2f
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/delete_contact_response.py
@@ -0,0 +1,94 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict
+from typing import Any, ClassVar, Dict, List, Optional
+from symphony.bdk.gen.federation_model.bulk_removal_status import BulkRemovalStatus
+from symphony.bdk.gen.federation_model.delete_contact_request import DeleteContactRequest
+from typing import Optional, Set
+from typing_extensions import Self
+
+class DeleteContactResponse(BaseModel):
+ """
+ DeleteContactResponse
+ """ # noqa: E501
+ contact: Optional[DeleteContactRequest] = None
+ status: Optional[BulkRemovalStatus] = None
+ __properties: ClassVar[List[str]] = ["contact", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of DeleteContactResponse from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ # override the default output from pydantic by calling `to_dict()` of contact
+ if self.contact:
+ _dict['contact'] = self.contact.to_dict()
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of DeleteContactResponse from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "contact": DeleteContactRequest.from_dict(obj["contact"]) if obj.get("contact") is not None else None,
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/delete_contact_responsev2.py b/symphony/bdk/gen/federation_model/delete_contact_responsev2.py
new file mode 100644
index 00000000..70664f0c
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/delete_contact_responsev2.py
@@ -0,0 +1,94 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict
+from typing import Any, ClassVar, Dict, List, Optional
+from symphony.bdk.gen.federation_model.bulk_removal_statusv2 import BulkRemovalStatusv2
+from symphony.bdk.gen.federation_model.delete_contact_requestv2 import DeleteContactRequestv2
+from typing import Optional, Set
+from typing_extensions import Self
+
+class DeleteContactResponsev2(BaseModel):
+ """
+ DeleteContactResponsev2
+ """ # noqa: E501
+ contact: Optional[DeleteContactRequestv2] = None
+ status: Optional[BulkRemovalStatusv2] = None
+ __properties: ClassVar[List[str]] = ["contact", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of DeleteContactResponsev2 from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ # override the default output from pydantic by calling `to_dict()` of contact
+ if self.contact:
+ _dict['contact'] = self.contact.to_dict()
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of DeleteContactResponsev2 from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "contact": DeleteContactRequestv2.from_dict(obj["contact"]) if obj.get("contact") is not None else None,
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/delete_contacts_request.py b/symphony/bdk/gen/federation_model/delete_contacts_request.py
new file mode 100644
index 00000000..0a314704
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/delete_contacts_request.py
@@ -0,0 +1,95 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict
+from typing import Any, ClassVar, Dict, List, Optional
+from symphony.bdk.gen.federation_model.delete_contact_request import DeleteContactRequest
+from typing import Optional, Set
+from typing_extensions import Self
+
+class DeleteContactsRequest(BaseModel):
+ """
+ DeleteContactsRequest
+ """ # noqa: E501
+ contacts: Optional[List[DeleteContactRequest]] = None
+ __properties: ClassVar[List[str]] = ["contacts"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of DeleteContactsRequest from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ # override the default output from pydantic by calling `to_dict()` of each item in contacts (list)
+ _items = []
+ if self.contacts:
+ for _item_contacts in self.contacts:
+ if _item_contacts:
+ _items.append(_item_contacts.to_dict())
+ _dict['contacts'] = _items
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of DeleteContactsRequest from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "contacts": [DeleteContactRequest.from_dict(_item) for _item in obj["contacts"]] if obj.get("contacts") is not None else None
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/delete_contacts_requestv2.py b/symphony/bdk/gen/federation_model/delete_contacts_requestv2.py
new file mode 100644
index 00000000..e76b9228
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/delete_contacts_requestv2.py
@@ -0,0 +1,95 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict
+from typing import Any, ClassVar, Dict, List, Optional
+from symphony.bdk.gen.federation_model.delete_contact_requestv2 import DeleteContactRequestv2
+from typing import Optional, Set
+from typing_extensions import Self
+
+class DeleteContactsRequestv2(BaseModel):
+ """
+ DeleteContactsRequestv2
+ """ # noqa: E501
+ contacts: Optional[List[DeleteContactRequestv2]] = None
+ __properties: ClassVar[List[str]] = ["contacts"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of DeleteContactsRequestv2 from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ # override the default output from pydantic by calling `to_dict()` of each item in contacts (list)
+ _items = []
+ if self.contacts:
+ for _item_contacts in self.contacts:
+ if _item_contacts:
+ _items.append(_item_contacts.to_dict())
+ _dict['contacts'] = _items
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of DeleteContactsRequestv2 from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "contacts": [DeleteContactRequestv2.from_dict(_item) for _item in obj["contacts"]] if obj.get("contacts") is not None else None
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/delete_contacts_response.py b/symphony/bdk/gen/federation_model/delete_contacts_response.py
new file mode 100644
index 00000000..9f3dc07b
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/delete_contacts_response.py
@@ -0,0 +1,95 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict
+from typing import Any, ClassVar, Dict, List, Optional
+from symphony.bdk.gen.federation_model.delete_contact_response import DeleteContactResponse
+from typing import Optional, Set
+from typing_extensions import Self
+
+class DeleteContactsResponse(BaseModel):
+ """
+ DeleteContactsResponse
+ """ # noqa: E501
+ report: Optional[List[DeleteContactResponse]] = None
+ __properties: ClassVar[List[str]] = ["report"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of DeleteContactsResponse from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ # override the default output from pydantic by calling `to_dict()` of each item in report (list)
+ _items = []
+ if self.report:
+ for _item_report in self.report:
+ if _item_report:
+ _items.append(_item_report.to_dict())
+ _dict['report'] = _items
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of DeleteContactsResponse from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "report": [DeleteContactResponse.from_dict(_item) for _item in obj["report"]] if obj.get("report") is not None else None
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/delete_contacts_responsev2.py b/symphony/bdk/gen/federation_model/delete_contacts_responsev2.py
new file mode 100644
index 00000000..b77e17c1
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/delete_contacts_responsev2.py
@@ -0,0 +1,95 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict
+from typing import Any, ClassVar, Dict, List, Optional
+from symphony.bdk.gen.federation_model.delete_contact_responsev2 import DeleteContactResponsev2
+from typing import Optional, Set
+from typing_extensions import Self
+
+class DeleteContactsResponsev2(BaseModel):
+ """
+ DeleteContactsResponsev2
+ """ # noqa: E501
+ report: Optional[List[DeleteContactResponsev2]] = None
+ __properties: ClassVar[List[str]] = ["report"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of DeleteContactsResponsev2 from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ # override the default output from pydantic by calling `to_dict()` of each item in report (list)
+ _items = []
+ if self.report:
+ for _item_report in self.report:
+ if _item_report:
+ _items.append(_item_report.to_dict())
+ _dict['report'] = _items
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of DeleteContactsResponsev2 from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "report": [DeleteContactResponsev2.from_dict(_item) for _item in obj["report"]] if obj.get("report") is not None else None
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/different_room_name_required.py b/symphony/bdk/gen/federation_model/different_room_name_required.py
new file mode 100644
index 00000000..c421fe21
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/different_room_name_required.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class DifferentRoomNameRequired(BaseModel):
+ """
+ Different room name is required.
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of DifferentRoomNameRequired from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of DifferentRoomNameRequired from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/emp_channel_connector.py b/symphony/bdk/gen/federation_model/emp_channel_connector.py
new file mode 100644
index 00000000..77d043e9
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/emp_channel_connector.py
@@ -0,0 +1,89 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, Field, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class EmpChannelConnector(BaseModel):
+ """
+ EmpChannelConnector
+ """ # noqa: E501
+ display_name: Optional[StrictStr] = Field(default=None, alias="displayName")
+ id: Optional[StrictStr] = None
+ __properties: ClassVar[List[str]] = ["displayName", "id"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of EmpChannelConnector from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of EmpChannelConnector from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "displayName": obj.get("displayName"),
+ "id": obj.get("id")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/emp_channel_connector_response.py b/symphony/bdk/gen/federation_model/emp_channel_connector_response.py
new file mode 100644
index 00000000..da3568d7
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/emp_channel_connector_response.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class EmpChannelConnectorResponse(BaseModel):
+ """
+ EmpChannelConnectorResponse
+ """ # noqa: E501
+ display_name: Optional[StrictStr] = Field(default=None, alias="displayName")
+ id: Optional[StrictStr] = None
+ available: Optional[StrictBool] = None
+ __properties: ClassVar[List[str]] = ["displayName", "id", "available"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of EmpChannelConnectorResponse from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of EmpChannelConnectorResponse from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "displayName": obj.get("displayName"),
+ "id": obj.get("id"),
+ "available": obj.get("available")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/enhanced_permission_response.py b/symphony/bdk/gen/federation_model/enhanced_permission_response.py
new file mode 100644
index 00000000..44e60c91
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/enhanced_permission_response.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class EnhancedPermissionResponse(BaseModel):
+ """
+ EnhancedPermissionResponse
+ """ # noqa: E501
+ is_default: Optional[StrictBool] = Field(default=None, alias="isDefault")
+ permission_id: Optional[StrictStr] = Field(default=None, alias="permissionId")
+ permission_name: Optional[StrictStr] = Field(default=None, alias="permissionName")
+ __properties: ClassVar[List[str]] = ["isDefault", "permissionId", "permissionName"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of EnhancedPermissionResponse from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of EnhancedPermissionResponse from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "isDefault": obj.get("isDefault"),
+ "permissionId": obj.get("permissionId"),
+ "permissionName": obj.get("permissionName")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/enhanced_permissions_response.py b/symphony/bdk/gen/federation_model/enhanced_permissions_response.py
new file mode 100644
index 00000000..89ba5ef4
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/enhanced_permissions_response.py
@@ -0,0 +1,95 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict
+from typing import Any, ClassVar, Dict, List, Optional
+from symphony.bdk.gen.federation_model.enhanced_permission_response import EnhancedPermissionResponse
+from typing import Optional, Set
+from typing_extensions import Self
+
+class EnhancedPermissionsResponse(BaseModel):
+ """
+ EnhancedPermissionsResponse
+ """ # noqa: E501
+ permissions: Optional[List[EnhancedPermissionResponse]] = None
+ __properties: ClassVar[List[str]] = ["permissions"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of EnhancedPermissionsResponse from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ # override the default output from pydantic by calling `to_dict()` of each item in permissions (list)
+ _items = []
+ if self.permissions:
+ for _item_permissions in self.permissions:
+ if _item_permissions:
+ _items.append(_item_permissions.to_dict())
+ _dict['permissions'] = _items
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of EnhancedPermissionsResponse from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "permissions": [EnhancedPermissionResponse.from_dict(_item) for _item in obj["permissions"]] if obj.get("permissions") is not None else None
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/entitled_response.py b/symphony/bdk/gen/federation_model/entitled_response.py
new file mode 100644
index 00000000..5e3c8ce2
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/entitled_response.py
@@ -0,0 +1,101 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict
+from typing import Any, ClassVar, Dict, List, Optional
+from symphony.bdk.gen.federation_model.entitlement_response import EntitlementResponse
+from symphony.bdk.gen.federation_model.pagination import Pagination
+from typing import Optional, Set
+from typing_extensions import Self
+
+class EntitledResponse(BaseModel):
+ """
+ EntitledResponse
+ """ # noqa: E501
+ entitlements: Optional[List[EntitlementResponse]] = None
+ pagination: Optional[Pagination] = None
+ __properties: ClassVar[List[str]] = ["entitlements", "pagination"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of EntitledResponse from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ # override the default output from pydantic by calling `to_dict()` of each item in entitlements (list)
+ _items = []
+ if self.entitlements:
+ for _item_entitlements in self.entitlements:
+ if _item_entitlements:
+ _items.append(_item_entitlements.to_dict())
+ _dict['entitlements'] = _items
+ # override the default output from pydantic by calling `to_dict()` of pagination
+ if self.pagination:
+ _dict['pagination'] = self.pagination.to_dict()
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of EntitledResponse from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "entitlements": [EntitlementResponse.from_dict(_item) for _item in obj["entitlements"]] if obj.get("entitlements") is not None else None,
+ "pagination": Pagination.from_dict(obj["pagination"]) if obj.get("pagination") is not None else None
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/entitlement_not_found_problem.py b/symphony/bdk/gen/federation_model/entitlement_not_found_problem.py
new file mode 100644
index 00000000..eb47574f
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/entitlement_not_found_problem.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class EntitlementNotFoundProblem(BaseModel):
+ """
+ Entitlement not found.
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of EntitlementNotFoundProblem from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of EntitlementNotFoundProblem from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/entitlement_request.py b/symphony/bdk/gen/federation_model/entitlement_request.py
new file mode 100644
index 00000000..78c4b042
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/entitlement_request.py
@@ -0,0 +1,97 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, Field, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class EntitlementRequest(BaseModel):
+ """
+ EntitlementRequest
+ """ # noqa: E501
+ advisor_email_address: Optional[StrictStr] = Field(default=None, alias="advisorEmailAddress")
+ external_network: StrictStr = Field(description="External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE", alias="externalNetwork")
+ symphony_id: Optional[StrictStr] = Field(default=None, alias="symphonyId")
+ advisor_phone_number: Optional[StrictStr] = Field(default=None, description="Required for the advisor to access SMS Direct In-Network and supported for SMS Direct Second-Number. Supported for the advisor to access WhatsApp Direct. However, note that the advisor’s phone number is not applicable for onboarding the advisor to other external networks (WeChat, WhatsApp, SMS or LINE).", alias="advisorPhoneNumber")
+ permissions: Optional[List[StrictStr]] = None
+ federation_group_id: Optional[StrictStr] = Field(default=None, alias="federationGroupId")
+ __properties: ClassVar[List[str]] = ["advisorEmailAddress", "externalNetwork", "symphonyId", "advisorPhoneNumber", "permissions", "federationGroupId"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of EntitlementRequest from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of EntitlementRequest from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "advisorEmailAddress": obj.get("advisorEmailAddress"),
+ "externalNetwork": obj.get("externalNetwork"),
+ "symphonyId": obj.get("symphonyId"),
+ "advisorPhoneNumber": obj.get("advisorPhoneNumber"),
+ "permissions": obj.get("permissions"),
+ "federationGroupId": obj.get("federationGroupId")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/entitlement_response.py b/symphony/bdk/gen/federation_model/entitlement_response.py
new file mode 100644
index 00000000..c69abe34
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/entitlement_response.py
@@ -0,0 +1,121 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, Field, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from symphony.bdk.gen.federation_model.permission_response import PermissionResponse
+from symphony.bdk.gen.federation_model.phone import Phone
+from typing import Optional, Set
+from typing_extensions import Self
+
+class EntitlementResponse(BaseModel):
+ """
+ EntitlementResponse
+ """ # noqa: E501
+ symphony_id: Optional[StrictStr] = Field(default=None, alias="symphonyId")
+ first_name: Optional[StrictStr] = Field(default=None, alias="firstName")
+ last_name: Optional[StrictStr] = Field(default=None, alias="lastName")
+ company_name: Optional[StrictStr] = Field(default=None, alias="companyName")
+ display_name: Optional[StrictStr] = Field(default=None, alias="displayName")
+ email_address: Optional[StrictStr] = Field(default=None, alias="emailAddress")
+ avatar: Optional[StrictStr] = None
+ external_network: Optional[StrictStr] = Field(default=None, alias="externalNetwork")
+ federation_group_id: Optional[StrictStr] = Field(default=None, alias="federationGroupId")
+ status: Optional[StrictStr] = None
+ phone: Optional[Phone] = None
+ permissions: Optional[List[PermissionResponse]] = None
+ __properties: ClassVar[List[str]] = ["symphonyId", "firstName", "lastName", "companyName", "displayName", "emailAddress", "avatar", "externalNetwork", "federationGroupId", "status", "phone", "permissions"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of EntitlementResponse from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ # override the default output from pydantic by calling `to_dict()` of phone
+ if self.phone:
+ _dict['phone'] = self.phone.to_dict()
+ # override the default output from pydantic by calling `to_dict()` of each item in permissions (list)
+ _items = []
+ if self.permissions:
+ for _item_permissions in self.permissions:
+ if _item_permissions:
+ _items.append(_item_permissions.to_dict())
+ _dict['permissions'] = _items
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of EntitlementResponse from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "symphonyId": obj.get("symphonyId"),
+ "firstName": obj.get("firstName"),
+ "lastName": obj.get("lastName"),
+ "companyName": obj.get("companyName"),
+ "displayName": obj.get("displayName"),
+ "emailAddress": obj.get("emailAddress"),
+ "avatar": obj.get("avatar"),
+ "externalNetwork": obj.get("externalNetwork"),
+ "federationGroupId": obj.get("federationGroupId"),
+ "status": obj.get("status"),
+ "phone": Phone.from_dict(obj["phone"]) if obj.get("phone") is not None else None,
+ "permissions": [PermissionResponse.from_dict(_item) for _item in obj["permissions"]] if obj.get("permissions") is not None else None
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/entitlement_type_not_found_problem.py b/symphony/bdk/gen/federation_model/entitlement_type_not_found_problem.py
new file mode 100644
index 00000000..ce8a263d
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/entitlement_type_not_found_problem.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class EntitlementTypeNotFoundProblem(BaseModel):
+ """
+ Entitlement type not found
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of EntitlementTypeNotFoundProblem from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of EntitlementTypeNotFoundProblem from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/entitlement_user_already_exists_problem.py b/symphony/bdk/gen/federation_model/entitlement_user_already_exists_problem.py
new file mode 100644
index 00000000..b54a3c17
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/entitlement_user_already_exists_problem.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class EntitlementUserAlreadyExistsProblem(BaseModel):
+ """
+ Entitlement already exists.
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of EntitlementUserAlreadyExistsProblem from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of EntitlementUserAlreadyExistsProblem from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/entitlements_response.py b/symphony/bdk/gen/federation_model/entitlements_response.py
new file mode 100644
index 00000000..ab2bb802
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/entitlements_response.py
@@ -0,0 +1,92 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class EntitlementsResponse(BaseModel):
+ """
+ EntitlementsResponse
+ """ # noqa: E501
+ entitlements: Optional[Any] = None
+ __properties: ClassVar[List[str]] = ["entitlements"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of EntitlementsResponse from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ # set to None if entitlements (nullable) is None
+ # and model_fields_set contains the field
+ if self.entitlements is None and "entitlements" in self.model_fields_set:
+ _dict['entitlements'] = None
+
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of EntitlementsResponse from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "entitlements": obj.get("entitlements")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/external_network.py b/symphony/bdk/gen/federation_model/external_network.py
new file mode 100644
index 00000000..c5f8935a
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/external_network.py
@@ -0,0 +1,101 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, Field, StrictStr, field_validator
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class ExternalNetwork(BaseModel):
+ """
+ ExternalNetwork
+ """ # noqa: E501
+ external_network: Optional[StrictStr] = Field(default=None, alias="externalNetwork")
+ availability: Optional[StrictStr] = None
+ emp_status: Optional[StrictStr] = Field(default=None, alias="empStatus")
+ __properties: ClassVar[List[str]] = ["externalNetwork", "availability", "empStatus"]
+
+ @field_validator('emp_status')
+ def emp_status_validate_enum(cls, value):
+ """Validates the enum"""
+ if value is None:
+ return value
+
+ if value not in set(['CONNECTED', 'DISCONNECTED', 'PENDING', 'UNKNOWN']):
+ raise ValueError("must be one of enum values ('CONNECTED', 'DISCONNECTED', 'PENDING', 'UNKNOWN')")
+ return value
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of ExternalNetwork from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of ExternalNetwork from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "externalNetwork": obj.get("externalNetwork"),
+ "availability": obj.get("availability"),
+ "empStatus": obj.get("empStatus")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/external_network_not_found.py b/symphony/bdk/gen/federation_model/external_network_not_found.py
new file mode 100644
index 00000000..d1c806bd
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/external_network_not_found.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class ExternalNetworkNotFound(BaseModel):
+ """
+ External network not found.
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of ExternalNetworkNotFound from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of ExternalNetworkNotFound from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/federated_account_not_found.py b/symphony/bdk/gen/federation_model/federated_account_not_found.py
new file mode 100644
index 00000000..bb3fe53a
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/federated_account_not_found.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class FederatedAccountNotFound(BaseModel):
+ """
+ FederatedAccount not found.
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of FederatedAccountNotFound from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of FederatedAccountNotFound from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/federation_group_emp_forbidden.py b/symphony/bdk/gen/federation_model/federation_group_emp_forbidden.py
new file mode 100644
index 00000000..d1bba3a4
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/federation_group_emp_forbidden.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class FederationGroupEmpForbidden(BaseModel):
+ """
+ Access is denied, you don't have the permission to perform this operation
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of FederationGroupEmpForbidden from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of FederationGroupEmpForbidden from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/federation_group_not_found.py b/symphony/bdk/gen/federation_model/federation_group_not_found.py
new file mode 100644
index 00000000..194e1a35
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/federation_group_not_found.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class FederationGroupNotFound(BaseModel):
+ """
+ Federation group not found
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of FederationGroupNotFound from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of FederationGroupNotFound from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/find_contact_response.py b/symphony/bdk/gen/federation_model/find_contact_response.py
new file mode 100644
index 00000000..2fd792d4
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/find_contact_response.py
@@ -0,0 +1,115 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictStr, field_validator
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class FindContactResponse(BaseModel):
+ """
+ FindContactResponse
+ """ # noqa: E501
+ first_name: Optional[StrictStr] = Field(default=None, alias="firstName")
+ last_name: Optional[StrictStr] = Field(default=None, alias="lastName")
+ company_name: Optional[StrictStr] = Field(default=None, alias="companyName")
+ email_address: Optional[StrictStr] = Field(default=None, alias="emailAddress")
+ phone_number: Optional[StrictStr] = Field(default=None, alias="phoneNumber")
+ external_network: Optional[StrictStr] = Field(default=None, description="External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE", alias="externalNetwork")
+ symphony_id: Optional[StrictStr] = Field(default=None, alias="symphonyId")
+ advisors: Optional[List[StrictStr]] = Field(default=None, description="Advisors Symphony IDs")
+ status: Optional[StrictStr] = None
+ is_colleague: Optional[StrictBool] = Field(default=False, alias="isColleague")
+ __properties: ClassVar[List[str]] = ["firstName", "lastName", "companyName", "emailAddress", "phoneNumber", "externalNetwork", "symphonyId", "advisors", "status", "isColleague"]
+
+ @field_validator('status')
+ def status_validate_enum(cls, value):
+ """Validates the enum"""
+ if value is None:
+ return value
+
+ if value not in set(['PENDING_CONFIRMATION', 'CONFIRMED', 'INVITE_EXPIRED', 'CANCELED', 'UNAVAILABLE', 'INCOMPLETE']):
+ raise ValueError("must be one of enum values ('PENDING_CONFIRMATION', 'CONFIRMED', 'INVITE_EXPIRED', 'CANCELED', 'UNAVAILABLE', 'INCOMPLETE')")
+ return value
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of FindContactResponse from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of FindContactResponse from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "firstName": obj.get("firstName"),
+ "lastName": obj.get("lastName"),
+ "companyName": obj.get("companyName"),
+ "emailAddress": obj.get("emailAddress"),
+ "phoneNumber": obj.get("phoneNumber"),
+ "externalNetwork": obj.get("externalNetwork"),
+ "symphonyId": obj.get("symphonyId"),
+ "advisors": obj.get("advisors"),
+ "status": obj.get("status"),
+ "isColleague": obj.get("isColleague") if obj.get("isColleague") is not None else False
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/find_contact_response_v2.py b/symphony/bdk/gen/federation_model/find_contact_response_v2.py
new file mode 100644
index 00000000..df9e3466
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/find_contact_response_v2.py
@@ -0,0 +1,117 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictStr, field_validator
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class FindContactResponseV2(BaseModel):
+ """
+ FindContactResponseV2
+ """ # noqa: E501
+ first_name: Optional[StrictStr] = Field(default=None, alias="firstName")
+ last_name: Optional[StrictStr] = Field(default=None, alias="lastName")
+ company_name: Optional[StrictStr] = Field(default=None, alias="companyName")
+ email_address: Optional[StrictStr] = Field(default=None, alias="emailAddress")
+ phone_number: Optional[StrictStr] = Field(default=None, alias="phoneNumber")
+ external_network: Optional[StrictStr] = Field(default=None, description="External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE", alias="externalNetwork")
+ symphony_id: Optional[StrictStr] = Field(default=None, alias="symphonyId")
+ advisors: Optional[List[StrictStr]] = Field(default=None, description="Advisors Symphony IDs")
+ status: Optional[StrictStr] = None
+ is_colleague: Optional[StrictBool] = Field(default=False, alias="isColleague")
+ preferred_language: Optional[StrictStr] = Field(default=None, alias="preferredLanguage")
+ __properties: ClassVar[List[str]] = ["firstName", "lastName", "companyName", "emailAddress", "phoneNumber", "externalNetwork", "symphonyId", "advisors", "status", "isColleague", "preferredLanguage"]
+
+ @field_validator('status')
+ def status_validate_enum(cls, value):
+ """Validates the enum"""
+ if value is None:
+ return value
+
+ if value not in set(['PENDING_CONFIRMATION', 'CONFIRMED', 'INVITE_EXPIRED', 'CANCELED', 'UNAVAILABLE', 'INCOMPLETE']):
+ raise ValueError("must be one of enum values ('PENDING_CONFIRMATION', 'CONFIRMED', 'INVITE_EXPIRED', 'CANCELED', 'UNAVAILABLE', 'INCOMPLETE')")
+ return value
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of FindContactResponseV2 from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of FindContactResponseV2 from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "firstName": obj.get("firstName"),
+ "lastName": obj.get("lastName"),
+ "companyName": obj.get("companyName"),
+ "emailAddress": obj.get("emailAddress"),
+ "phoneNumber": obj.get("phoneNumber"),
+ "externalNetwork": obj.get("externalNetwork"),
+ "symphonyId": obj.get("symphonyId"),
+ "advisors": obj.get("advisors"),
+ "status": obj.get("status"),
+ "isColleague": obj.get("isColleague") if obj.get("isColleague") is not None else False,
+ "preferredLanguage": obj.get("preferredLanguage")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/find_contact_response_v2_with_block_status.py b/symphony/bdk/gen/federation_model/find_contact_response_v2_with_block_status.py
new file mode 100644
index 00000000..4461bdd1
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/find_contact_response_v2_with_block_status.py
@@ -0,0 +1,127 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from datetime import datetime
+from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictStr, field_validator
+from typing import Any, ClassVar, Dict, List, Optional
+from symphony.bdk.gen.federation_model.blocking_reason_enum import BlockingReasonEnum
+from typing import Optional, Set
+from typing_extensions import Self
+
+class FindContactResponseV2WithBlockStatus(BaseModel):
+ """
+ FindContactResponseV2WithBlockStatus
+ """ # noqa: E501
+ first_name: Optional[StrictStr] = Field(default=None, alias="firstName")
+ last_name: Optional[StrictStr] = Field(default=None, alias="lastName")
+ company_name: Optional[StrictStr] = Field(default=None, alias="companyName")
+ email_address: Optional[StrictStr] = Field(default=None, alias="emailAddress")
+ phone_number: Optional[StrictStr] = Field(default=None, alias="phoneNumber")
+ external_network: Optional[StrictStr] = Field(default=None, description="External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE", alias="externalNetwork")
+ symphony_id: Optional[StrictStr] = Field(default=None, alias="symphonyId")
+ advisors: Optional[List[StrictStr]] = Field(default=None, description="Advisors Symphony IDs")
+ status: Optional[StrictStr] = None
+ is_colleague: Optional[StrictBool] = Field(default=False, alias="isColleague")
+ preferred_language: Optional[StrictStr] = Field(default=None, alias="preferredLanguage")
+ advisor_symphony_id: Optional[StrictStr] = Field(default=None, alias="advisorSymphonyId")
+ reason: Optional[BlockingReasonEnum] = None
+ comment: Optional[StrictStr] = None
+ request_date: Optional[datetime] = Field(default=None, alias="requestDate")
+ __properties: ClassVar[List[str]] = ["firstName", "lastName", "companyName", "emailAddress", "phoneNumber", "externalNetwork", "symphonyId", "advisors", "status", "isColleague", "preferredLanguage", "advisorSymphonyId", "reason", "comment", "requestDate"]
+
+ @field_validator('status')
+ def status_validate_enum(cls, value):
+ """Validates the enum"""
+ if value is None:
+ return value
+
+ if value not in set(['PENDING_CONFIRMATION', 'CONFIRMED', 'INVITE_EXPIRED', 'CANCELED', 'UNAVAILABLE', 'INCOMPLETE']):
+ raise ValueError("must be one of enum values ('PENDING_CONFIRMATION', 'CONFIRMED', 'INVITE_EXPIRED', 'CANCELED', 'UNAVAILABLE', 'INCOMPLETE')")
+ return value
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of FindContactResponseV2WithBlockStatus from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of FindContactResponseV2WithBlockStatus from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "firstName": obj.get("firstName"),
+ "lastName": obj.get("lastName"),
+ "companyName": obj.get("companyName"),
+ "emailAddress": obj.get("emailAddress"),
+ "phoneNumber": obj.get("phoneNumber"),
+ "externalNetwork": obj.get("externalNetwork"),
+ "symphonyId": obj.get("symphonyId"),
+ "advisors": obj.get("advisors"),
+ "status": obj.get("status"),
+ "isColleague": obj.get("isColleague") if obj.get("isColleague") is not None else False,
+ "preferredLanguage": obj.get("preferredLanguage"),
+ "advisorSymphonyId": obj.get("advisorSymphonyId"),
+ "reason": obj.get("reason"),
+ "comment": obj.get("comment"),
+ "requestDate": obj.get("requestDate")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/forbidden.py b/symphony/bdk/gen/federation_model/forbidden.py
new file mode 100644
index 00000000..86023d50
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/forbidden.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class Forbidden(BaseModel):
+ """
+ Access is denied, you don't have the permission to perform this operation
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of Forbidden from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of Forbidden from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/forbidden_advisor.py b/symphony/bdk/gen/federation_model/forbidden_advisor.py
new file mode 100644
index 00000000..f16630ad
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/forbidden_advisor.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class ForbiddenAdvisor(BaseModel):
+ """
+ This Advisor is not permissioned for Onboarding.
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of ForbiddenAdvisor from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of ForbiddenAdvisor from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/forbidden_entitlement_type.py b/symphony/bdk/gen/federation_model/forbidden_entitlement_type.py
new file mode 100644
index 00000000..0a39522e
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/forbidden_entitlement_type.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class ForbiddenEntitlementType(BaseModel):
+ """
+ Forbidden entitlement type.
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of ForbiddenEntitlementType from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of ForbiddenEntitlementType from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/forbidden_onboarder.py b/symphony/bdk/gen/federation_model/forbidden_onboarder.py
new file mode 100644
index 00000000..a8e0850e
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/forbidden_onboarder.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class ForbiddenOnboarder(BaseModel):
+ """
+ This Onboarder is not entitled for this external network.
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of ForbiddenOnboarder from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of ForbiddenOnboarder from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/get_advisor_phone_numbers404_response.py b/symphony/bdk/gen/federation_model/get_advisor_phone_numbers404_response.py
new file mode 100644
index 00000000..880f510c
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/get_advisor_phone_numbers404_response.py
@@ -0,0 +1,137 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import json
+import pprint
+from pydantic import BaseModel, ConfigDict, Field, StrictStr, ValidationError, field_validator
+from typing import Any, List, Optional
+from symphony.bdk.gen.federation_model.advisor_not_found import AdvisorNotFound
+from symphony.bdk.gen.federation_model.phone_number_not_assigned import PhoneNumberNotAssigned
+from pydantic import StrictStr, Field
+from typing import Union, List, Set, Optional, Dict
+from typing_extensions import Literal, Self
+
+GETADVISORPHONENUMBERS404RESPONSE_ONE_OF_SCHEMAS = ["AdvisorNotFound", "PhoneNumberNotAssigned"]
+
+class GetAdvisorPhoneNumbers404Response(BaseModel):
+ """
+ GetAdvisorPhoneNumbers404Response
+ """
+ # data type: PhoneNumberNotAssigned
+ oneof_schema_1_validator: Optional[PhoneNumberNotAssigned] = None
+ # data type: AdvisorNotFound
+ oneof_schema_2_validator: Optional[AdvisorNotFound] = None
+ actual_instance: Optional[Union[AdvisorNotFound, PhoneNumberNotAssigned]] = None
+ one_of_schemas: Set[str] = { "AdvisorNotFound", "PhoneNumberNotAssigned" }
+
+ model_config = ConfigDict(
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def __init__(self, *args, **kwargs) -> None:
+ if args:
+ if len(args) > 1:
+ raise ValueError("If a position argument is used, only 1 is allowed to set `actual_instance`")
+ if kwargs:
+ raise ValueError("If a position argument is used, keyword arguments cannot be used.")
+ super().__init__(actual_instance=args[0])
+ else:
+ super().__init__(**kwargs)
+
+ @field_validator('actual_instance')
+ def actual_instance_must_validate_oneof(cls, v):
+ instance = GetAdvisorPhoneNumbers404Response.model_construct()
+ error_messages = []
+ match = 0
+ # validate data type: PhoneNumberNotAssigned
+ if not isinstance(v, PhoneNumberNotAssigned):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `PhoneNumberNotAssigned`")
+ else:
+ match += 1
+ # validate data type: AdvisorNotFound
+ if not isinstance(v, AdvisorNotFound):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `AdvisorNotFound`")
+ else:
+ match += 1
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when setting `actual_instance` in GetAdvisorPhoneNumbers404Response with oneOf schemas: AdvisorNotFound, PhoneNumberNotAssigned. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when setting `actual_instance` in GetAdvisorPhoneNumbers404Response with oneOf schemas: AdvisorNotFound, PhoneNumberNotAssigned. Details: " + ", ".join(error_messages))
+ else:
+ return v
+
+ @classmethod
+ def from_dict(cls, obj: Union[str, Dict[str, Any]]) -> Self:
+ return cls.from_json(json.dumps(obj))
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Self:
+ """Returns the object represented by the json string"""
+ instance = cls.model_construct()
+ error_messages = []
+ match = 0
+
+ # deserialize data into PhoneNumberNotAssigned
+ try:
+ instance.actual_instance = PhoneNumberNotAssigned.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+ # deserialize data into AdvisorNotFound
+ try:
+ instance.actual_instance = AdvisorNotFound.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when deserializing the JSON string into GetAdvisorPhoneNumbers404Response with oneOf schemas: AdvisorNotFound, PhoneNumberNotAssigned. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when deserializing the JSON string into GetAdvisorPhoneNumbers404Response with oneOf schemas: AdvisorNotFound, PhoneNumberNotAssigned. Details: " + ", ".join(error_messages))
+ else:
+ return instance
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the actual instance"""
+ if self.actual_instance is None:
+ return "null"
+
+ if hasattr(self.actual_instance, "to_json") and callable(self.actual_instance.to_json):
+ return self.actual_instance.to_json()
+ else:
+ return json.dumps(self.actual_instance)
+
+ def to_dict(self) -> Optional[Union[Dict[str, Any], AdvisorNotFound, PhoneNumberNotAssigned]]:
+ """Returns the dict representation of the actual instance"""
+ if self.actual_instance is None:
+ return None
+
+ if hasattr(self.actual_instance, "to_dict") and callable(self.actual_instance.to_dict):
+ return self.actual_instance.to_dict()
+ else:
+ # primitive type
+ return self.actual_instance
+
+ def to_str(self) -> str:
+ """Returns the string representation of the actual instance"""
+ return pprint.pformat(self.model_dump())
+
+
diff --git a/symphony/bdk/gen/federation_model/get_blocked_phone_numbers_item.py b/symphony/bdk/gen/federation_model/get_blocked_phone_numbers_item.py
new file mode 100644
index 00000000..b9fa48d1
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/get_blocked_phone_numbers_item.py
@@ -0,0 +1,92 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, Field, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from symphony.bdk.gen.federation_model.blocking_reason_enum import BlockingReasonEnum
+from typing import Optional, Set
+from typing_extensions import Self
+
+class GetBlockedPhoneNumbersItem(BaseModel):
+ """
+ GetBlockedPhoneNumbersItem
+ """ # noqa: E501
+ phone_number: Optional[StrictStr] = Field(default=None, alias="phoneNumber")
+ reason: Optional[BlockingReasonEnum] = None
+ comment: Optional[StrictStr] = None
+ __properties: ClassVar[List[str]] = ["phoneNumber", "reason", "comment"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of GetBlockedPhoneNumbersItem from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of GetBlockedPhoneNumbersItem from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "phoneNumber": obj.get("phoneNumber"),
+ "reason": obj.get("reason"),
+ "comment": obj.get("comment")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/get_blocked_phone_numbers_response.py b/symphony/bdk/gen/federation_model/get_blocked_phone_numbers_response.py
new file mode 100644
index 00000000..66d40d5b
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/get_blocked_phone_numbers_response.py
@@ -0,0 +1,95 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, Field
+from typing import Any, ClassVar, Dict, List, Optional
+from symphony.bdk.gen.federation_model.get_blocked_phone_numbers_item import GetBlockedPhoneNumbersItem
+from typing import Optional, Set
+from typing_extensions import Self
+
+class GetBlockedPhoneNumbersResponse(BaseModel):
+ """
+ GetBlockedPhoneNumbersResponse
+ """ # noqa: E501
+ phone_numbers: Optional[List[GetBlockedPhoneNumbersItem]] = Field(default=None, alias="phoneNumbers")
+ __properties: ClassVar[List[str]] = ["phoneNumbers"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of GetBlockedPhoneNumbersResponse from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ # override the default output from pydantic by calling `to_dict()` of each item in phone_numbers (list)
+ _items = []
+ if self.phone_numbers:
+ for _item_phone_numbers in self.phone_numbers:
+ if _item_phone_numbers:
+ _items.append(_item_phone_numbers.to_dict())
+ _dict['phoneNumbers'] = _items
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of GetBlockedPhoneNumbersResponse from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "phoneNumbers": [GetBlockedPhoneNumbersItem.from_dict(_item) for _item in obj["phoneNumbers"]] if obj.get("phoneNumbers") is not None else None
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/incompatible_external_network_and_request_body.py b/symphony/bdk/gen/federation_model/incompatible_external_network_and_request_body.py
new file mode 100644
index 00000000..04089629
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/incompatible_external_network_and_request_body.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class IncompatibleExternalNetworkAndRequestBody(BaseModel):
+ """
+ Incompatible external network and request body.
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of IncompatibleExternalNetworkAndRequestBody from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of IncompatibleExternalNetworkAndRequestBody from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/inline_response400.py b/symphony/bdk/gen/federation_model/inline_response400.py
new file mode 100644
index 00000000..0f3e66fd
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/inline_response400.py
@@ -0,0 +1,165 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import json
+import pprint
+from pydantic import BaseModel, ConfigDict, Field, StrictStr, ValidationError, field_validator
+from typing import Any, List, Optional
+from symphony.bdk.gen.federation_model.advisor_id_not_provided import AdvisorIdNotProvided
+from symphony.bdk.gen.federation_model.entitlement_type_not_found_problem import EntitlementTypeNotFoundProblem
+from symphony.bdk.gen.federation_model.entitlement_user_already_exists_problem import EntitlementUserAlreadyExistsProblem
+from symphony.bdk.gen.federation_model.symphony_user_not_found_problem import SymphonyUserNotFoundProblem
+from pydantic import StrictStr, Field
+from typing import Union, List, Set, Optional, Dict
+from typing_extensions import Literal, Self
+
+INLINERESPONSE400_ONE_OF_SCHEMAS = ["AdvisorIdNotProvided", "EntitlementTypeNotFoundProblem", "EntitlementUserAlreadyExistsProblem", "SymphonyUserNotFoundProblem"]
+
+class InlineResponse400(BaseModel):
+ """
+ InlineResponse400
+ """
+ # data type: EntitlementUserAlreadyExistsProblem
+ oneof_schema_1_validator: Optional[EntitlementUserAlreadyExistsProblem] = None
+ # data type: SymphonyUserNotFoundProblem
+ oneof_schema_2_validator: Optional[SymphonyUserNotFoundProblem] = None
+ # data type: EntitlementTypeNotFoundProblem
+ oneof_schema_3_validator: Optional[EntitlementTypeNotFoundProblem] = None
+ # data type: AdvisorIdNotProvided
+ oneof_schema_4_validator: Optional[AdvisorIdNotProvided] = None
+ actual_instance: Optional[Union[AdvisorIdNotProvided, EntitlementTypeNotFoundProblem, EntitlementUserAlreadyExistsProblem, SymphonyUserNotFoundProblem]] = None
+ one_of_schemas: Set[str] = { "AdvisorIdNotProvided", "EntitlementTypeNotFoundProblem", "EntitlementUserAlreadyExistsProblem", "SymphonyUserNotFoundProblem" }
+
+ model_config = ConfigDict(
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def __init__(self, *args, **kwargs) -> None:
+ if args:
+ if len(args) > 1:
+ raise ValueError("If a position argument is used, only 1 is allowed to set `actual_instance`")
+ if kwargs:
+ raise ValueError("If a position argument is used, keyword arguments cannot be used.")
+ super().__init__(actual_instance=args[0])
+ else:
+ super().__init__(**kwargs)
+
+ @field_validator('actual_instance')
+ def actual_instance_must_validate_oneof(cls, v):
+ instance = InlineResponse400.model_construct()
+ error_messages = []
+ match = 0
+ # validate data type: EntitlementUserAlreadyExistsProblem
+ if not isinstance(v, EntitlementUserAlreadyExistsProblem):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `EntitlementUserAlreadyExistsProblem`")
+ else:
+ match += 1
+ # validate data type: SymphonyUserNotFoundProblem
+ if not isinstance(v, SymphonyUserNotFoundProblem):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `SymphonyUserNotFoundProblem`")
+ else:
+ match += 1
+ # validate data type: EntitlementTypeNotFoundProblem
+ if not isinstance(v, EntitlementTypeNotFoundProblem):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `EntitlementTypeNotFoundProblem`")
+ else:
+ match += 1
+ # validate data type: AdvisorIdNotProvided
+ if not isinstance(v, AdvisorIdNotProvided):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `AdvisorIdNotProvided`")
+ else:
+ match += 1
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when setting `actual_instance` in InlineResponse400 with oneOf schemas: AdvisorIdNotProvided, EntitlementTypeNotFoundProblem, EntitlementUserAlreadyExistsProblem, SymphonyUserNotFoundProblem. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when setting `actual_instance` in InlineResponse400 with oneOf schemas: AdvisorIdNotProvided, EntitlementTypeNotFoundProblem, EntitlementUserAlreadyExistsProblem, SymphonyUserNotFoundProblem. Details: " + ", ".join(error_messages))
+ else:
+ return v
+
+ @classmethod
+ def from_dict(cls, obj: Union[str, Dict[str, Any]]) -> Self:
+ return cls.from_json(json.dumps(obj))
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Self:
+ """Returns the object represented by the json string"""
+ instance = cls.model_construct()
+ error_messages = []
+ match = 0
+
+ # deserialize data into EntitlementUserAlreadyExistsProblem
+ try:
+ instance.actual_instance = EntitlementUserAlreadyExistsProblem.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+ # deserialize data into SymphonyUserNotFoundProblem
+ try:
+ instance.actual_instance = SymphonyUserNotFoundProblem.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+ # deserialize data into EntitlementTypeNotFoundProblem
+ try:
+ instance.actual_instance = EntitlementTypeNotFoundProblem.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+ # deserialize data into AdvisorIdNotProvided
+ try:
+ instance.actual_instance = AdvisorIdNotProvided.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when deserializing the JSON string into InlineResponse400 with oneOf schemas: AdvisorIdNotProvided, EntitlementTypeNotFoundProblem, EntitlementUserAlreadyExistsProblem, SymphonyUserNotFoundProblem. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when deserializing the JSON string into InlineResponse400 with oneOf schemas: AdvisorIdNotProvided, EntitlementTypeNotFoundProblem, EntitlementUserAlreadyExistsProblem, SymphonyUserNotFoundProblem. Details: " + ", ".join(error_messages))
+ else:
+ return instance
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the actual instance"""
+ if self.actual_instance is None:
+ return "null"
+
+ if hasattr(self.actual_instance, "to_json") and callable(self.actual_instance.to_json):
+ return self.actual_instance.to_json()
+ else:
+ return json.dumps(self.actual_instance)
+
+ def to_dict(self) -> Optional[Union[Dict[str, Any], AdvisorIdNotProvided, EntitlementTypeNotFoundProblem, EntitlementUserAlreadyExistsProblem, SymphonyUserNotFoundProblem]]:
+ """Returns the dict representation of the actual instance"""
+ if self.actual_instance is None:
+ return None
+
+ if hasattr(self.actual_instance, "to_dict") and callable(self.actual_instance.to_dict):
+ return self.actual_instance.to_dict()
+ else:
+ # primitive type
+ return self.actual_instance
+
+ def to_str(self) -> str:
+ """Returns the string representation of the actual instance"""
+ return pprint.pformat(self.model_dump())
+
+
diff --git a/symphony/bdk/gen/federation_model/inline_response4001.py b/symphony/bdk/gen/federation_model/inline_response4001.py
new file mode 100644
index 00000000..4af004d7
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/inline_response4001.py
@@ -0,0 +1,137 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import json
+import pprint
+from pydantic import BaseModel, ConfigDict, Field, StrictStr, ValidationError, field_validator
+from typing import Any, List, Optional
+from symphony.bdk.gen.federation_model.external_network_not_found import ExternalNetworkNotFound
+from symphony.bdk.gen.federation_model.invalid_user_info import InvalidUserInfo
+from pydantic import StrictStr, Field
+from typing import Union, List, Set, Optional, Dict
+from typing_extensions import Literal, Self
+
+INLINERESPONSE4001_ONE_OF_SCHEMAS = ["ExternalNetworkNotFound", "InvalidUserInfo"]
+
+class InlineResponse4001(BaseModel):
+ """
+ InlineResponse4001
+ """
+ # data type: ExternalNetworkNotFound
+ oneof_schema_1_validator: Optional[ExternalNetworkNotFound] = None
+ # data type: InvalidUserInfo
+ oneof_schema_2_validator: Optional[InvalidUserInfo] = None
+ actual_instance: Optional[Union[ExternalNetworkNotFound, InvalidUserInfo]] = None
+ one_of_schemas: Set[str] = { "ExternalNetworkNotFound", "InvalidUserInfo" }
+
+ model_config = ConfigDict(
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def __init__(self, *args, **kwargs) -> None:
+ if args:
+ if len(args) > 1:
+ raise ValueError("If a position argument is used, only 1 is allowed to set `actual_instance`")
+ if kwargs:
+ raise ValueError("If a position argument is used, keyword arguments cannot be used.")
+ super().__init__(actual_instance=args[0])
+ else:
+ super().__init__(**kwargs)
+
+ @field_validator('actual_instance')
+ def actual_instance_must_validate_oneof(cls, v):
+ instance = InlineResponse4001.model_construct()
+ error_messages = []
+ match = 0
+ # validate data type: ExternalNetworkNotFound
+ if not isinstance(v, ExternalNetworkNotFound):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `ExternalNetworkNotFound`")
+ else:
+ match += 1
+ # validate data type: InvalidUserInfo
+ if not isinstance(v, InvalidUserInfo):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `InvalidUserInfo`")
+ else:
+ match += 1
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when setting `actual_instance` in InlineResponse4001 with oneOf schemas: ExternalNetworkNotFound, InvalidUserInfo. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when setting `actual_instance` in InlineResponse4001 with oneOf schemas: ExternalNetworkNotFound, InvalidUserInfo. Details: " + ", ".join(error_messages))
+ else:
+ return v
+
+ @classmethod
+ def from_dict(cls, obj: Union[str, Dict[str, Any]]) -> Self:
+ return cls.from_json(json.dumps(obj))
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Self:
+ """Returns the object represented by the json string"""
+ instance = cls.model_construct()
+ error_messages = []
+ match = 0
+
+ # deserialize data into ExternalNetworkNotFound
+ try:
+ instance.actual_instance = ExternalNetworkNotFound.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+ # deserialize data into InvalidUserInfo
+ try:
+ instance.actual_instance = InvalidUserInfo.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when deserializing the JSON string into InlineResponse4001 with oneOf schemas: ExternalNetworkNotFound, InvalidUserInfo. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when deserializing the JSON string into InlineResponse4001 with oneOf schemas: ExternalNetworkNotFound, InvalidUserInfo. Details: " + ", ".join(error_messages))
+ else:
+ return instance
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the actual instance"""
+ if self.actual_instance is None:
+ return "null"
+
+ if hasattr(self.actual_instance, "to_json") and callable(self.actual_instance.to_json):
+ return self.actual_instance.to_json()
+ else:
+ return json.dumps(self.actual_instance)
+
+ def to_dict(self) -> Optional[Union[Dict[str, Any], ExternalNetworkNotFound, InvalidUserInfo]]:
+ """Returns the dict representation of the actual instance"""
+ if self.actual_instance is None:
+ return None
+
+ if hasattr(self.actual_instance, "to_dict") and callable(self.actual_instance.to_dict):
+ return self.actual_instance.to_dict()
+ else:
+ # primitive type
+ return self.actual_instance
+
+ def to_str(self) -> str:
+ """Returns the string representation of the actual instance"""
+ return pprint.pformat(self.model_dump())
+
+
diff --git a/symphony/bdk/gen/federation_model/inline_response4003.py b/symphony/bdk/gen/federation_model/inline_response4003.py
new file mode 100644
index 00000000..f468fe09
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/inline_response4003.py
@@ -0,0 +1,137 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import json
+import pprint
+from pydantic import BaseModel, ConfigDict, Field, StrictStr, ValidationError, field_validator
+from typing import Any, List, Optional
+from symphony.bdk.gen.federation_model.multi_company_room_not_supported import MultiCompanyRoomNotSupported
+from symphony.bdk.gen.federation_model.multi_external_network_room_not_supported import MultiExternalNetworkRoomNotSupported
+from pydantic import StrictStr, Field
+from typing import Union, List, Set, Optional, Dict
+from typing_extensions import Literal, Self
+
+INLINERESPONSE4003_ONE_OF_SCHEMAS = ["MultiCompanyRoomNotSupported", "MultiExternalNetworkRoomNotSupported"]
+
+class InlineResponse4003(BaseModel):
+ """
+ InlineResponse4003
+ """
+ # data type: MultiExternalNetworkRoomNotSupported
+ oneof_schema_1_validator: Optional[MultiExternalNetworkRoomNotSupported] = None
+ # data type: MultiCompanyRoomNotSupported
+ oneof_schema_2_validator: Optional[MultiCompanyRoomNotSupported] = None
+ actual_instance: Optional[Union[MultiCompanyRoomNotSupported, MultiExternalNetworkRoomNotSupported]] = None
+ one_of_schemas: Set[str] = { "MultiCompanyRoomNotSupported", "MultiExternalNetworkRoomNotSupported" }
+
+ model_config = ConfigDict(
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def __init__(self, *args, **kwargs) -> None:
+ if args:
+ if len(args) > 1:
+ raise ValueError("If a position argument is used, only 1 is allowed to set `actual_instance`")
+ if kwargs:
+ raise ValueError("If a position argument is used, keyword arguments cannot be used.")
+ super().__init__(actual_instance=args[0])
+ else:
+ super().__init__(**kwargs)
+
+ @field_validator('actual_instance')
+ def actual_instance_must_validate_oneof(cls, v):
+ instance = InlineResponse4003.model_construct()
+ error_messages = []
+ match = 0
+ # validate data type: MultiExternalNetworkRoomNotSupported
+ if not isinstance(v, MultiExternalNetworkRoomNotSupported):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `MultiExternalNetworkRoomNotSupported`")
+ else:
+ match += 1
+ # validate data type: MultiCompanyRoomNotSupported
+ if not isinstance(v, MultiCompanyRoomNotSupported):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `MultiCompanyRoomNotSupported`")
+ else:
+ match += 1
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when setting `actual_instance` in InlineResponse4003 with oneOf schemas: MultiCompanyRoomNotSupported, MultiExternalNetworkRoomNotSupported. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when setting `actual_instance` in InlineResponse4003 with oneOf schemas: MultiCompanyRoomNotSupported, MultiExternalNetworkRoomNotSupported. Details: " + ", ".join(error_messages))
+ else:
+ return v
+
+ @classmethod
+ def from_dict(cls, obj: Union[str, Dict[str, Any]]) -> Self:
+ return cls.from_json(json.dumps(obj))
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Self:
+ """Returns the object represented by the json string"""
+ instance = cls.model_construct()
+ error_messages = []
+ match = 0
+
+ # deserialize data into MultiExternalNetworkRoomNotSupported
+ try:
+ instance.actual_instance = MultiExternalNetworkRoomNotSupported.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+ # deserialize data into MultiCompanyRoomNotSupported
+ try:
+ instance.actual_instance = MultiCompanyRoomNotSupported.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when deserializing the JSON string into InlineResponse4003 with oneOf schemas: MultiCompanyRoomNotSupported, MultiExternalNetworkRoomNotSupported. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when deserializing the JSON string into InlineResponse4003 with oneOf schemas: MultiCompanyRoomNotSupported, MultiExternalNetworkRoomNotSupported. Details: " + ", ".join(error_messages))
+ else:
+ return instance
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the actual instance"""
+ if self.actual_instance is None:
+ return "null"
+
+ if hasattr(self.actual_instance, "to_json") and callable(self.actual_instance.to_json):
+ return self.actual_instance.to_json()
+ else:
+ return json.dumps(self.actual_instance)
+
+ def to_dict(self) -> Optional[Union[Dict[str, Any], MultiCompanyRoomNotSupported, MultiExternalNetworkRoomNotSupported]]:
+ """Returns the dict representation of the actual instance"""
+ if self.actual_instance is None:
+ return None
+
+ if hasattr(self.actual_instance, "to_dict") and callable(self.actual_instance.to_dict):
+ return self.actual_instance.to_dict()
+ else:
+ # primitive type
+ return self.actual_instance
+
+ def to_str(self) -> str:
+ """Returns the string representation of the actual instance"""
+ return pprint.pformat(self.model_dump())
+
+
diff --git a/symphony/bdk/gen/federation_model/inline_response403.py b/symphony/bdk/gen/federation_model/inline_response403.py
new file mode 100644
index 00000000..7600101d
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/inline_response403.py
@@ -0,0 +1,151 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import json
+import pprint
+from pydantic import BaseModel, ConfigDict, Field, StrictStr, ValidationError, field_validator
+from typing import Any, List, Optional
+from symphony.bdk.gen.federation_model.forbidden_advisor import ForbiddenAdvisor
+from symphony.bdk.gen.federation_model.forbidden_entitlement_type import ForbiddenEntitlementType
+from symphony.bdk.gen.federation_model.forbidden_onboarder import ForbiddenOnboarder
+from pydantic import StrictStr, Field
+from typing import Union, List, Set, Optional, Dict
+from typing_extensions import Literal, Self
+
+INLINERESPONSE403_ONE_OF_SCHEMAS = ["ForbiddenAdvisor", "ForbiddenEntitlementType", "ForbiddenOnboarder"]
+
+class InlineResponse403(BaseModel):
+ """
+ InlineResponse403
+ """
+ # data type: ForbiddenAdvisor
+ oneof_schema_1_validator: Optional[ForbiddenAdvisor] = None
+ # data type: ForbiddenOnboarder
+ oneof_schema_2_validator: Optional[ForbiddenOnboarder] = None
+ # data type: ForbiddenEntitlementType
+ oneof_schema_3_validator: Optional[ForbiddenEntitlementType] = None
+ actual_instance: Optional[Union[ForbiddenAdvisor, ForbiddenEntitlementType, ForbiddenOnboarder]] = None
+ one_of_schemas: Set[str] = { "ForbiddenAdvisor", "ForbiddenEntitlementType", "ForbiddenOnboarder" }
+
+ model_config = ConfigDict(
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def __init__(self, *args, **kwargs) -> None:
+ if args:
+ if len(args) > 1:
+ raise ValueError("If a position argument is used, only 1 is allowed to set `actual_instance`")
+ if kwargs:
+ raise ValueError("If a position argument is used, keyword arguments cannot be used.")
+ super().__init__(actual_instance=args[0])
+ else:
+ super().__init__(**kwargs)
+
+ @field_validator('actual_instance')
+ def actual_instance_must_validate_oneof(cls, v):
+ instance = InlineResponse403.model_construct()
+ error_messages = []
+ match = 0
+ # validate data type: ForbiddenAdvisor
+ if not isinstance(v, ForbiddenAdvisor):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `ForbiddenAdvisor`")
+ else:
+ match += 1
+ # validate data type: ForbiddenOnboarder
+ if not isinstance(v, ForbiddenOnboarder):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `ForbiddenOnboarder`")
+ else:
+ match += 1
+ # validate data type: ForbiddenEntitlementType
+ if not isinstance(v, ForbiddenEntitlementType):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `ForbiddenEntitlementType`")
+ else:
+ match += 1
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when setting `actual_instance` in InlineResponse403 with oneOf schemas: ForbiddenAdvisor, ForbiddenEntitlementType, ForbiddenOnboarder. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when setting `actual_instance` in InlineResponse403 with oneOf schemas: ForbiddenAdvisor, ForbiddenEntitlementType, ForbiddenOnboarder. Details: " + ", ".join(error_messages))
+ else:
+ return v
+
+ @classmethod
+ def from_dict(cls, obj: Union[str, Dict[str, Any]]) -> Self:
+ return cls.from_json(json.dumps(obj))
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Self:
+ """Returns the object represented by the json string"""
+ instance = cls.model_construct()
+ error_messages = []
+ match = 0
+
+ # deserialize data into ForbiddenAdvisor
+ try:
+ instance.actual_instance = ForbiddenAdvisor.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+ # deserialize data into ForbiddenOnboarder
+ try:
+ instance.actual_instance = ForbiddenOnboarder.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+ # deserialize data into ForbiddenEntitlementType
+ try:
+ instance.actual_instance = ForbiddenEntitlementType.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when deserializing the JSON string into InlineResponse403 with oneOf schemas: ForbiddenAdvisor, ForbiddenEntitlementType, ForbiddenOnboarder. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when deserializing the JSON string into InlineResponse403 with oneOf schemas: ForbiddenAdvisor, ForbiddenEntitlementType, ForbiddenOnboarder. Details: " + ", ".join(error_messages))
+ else:
+ return instance
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the actual instance"""
+ if self.actual_instance is None:
+ return "null"
+
+ if hasattr(self.actual_instance, "to_json") and callable(self.actual_instance.to_json):
+ return self.actual_instance.to_json()
+ else:
+ return json.dumps(self.actual_instance)
+
+ def to_dict(self) -> Optional[Union[Dict[str, Any], ForbiddenAdvisor, ForbiddenEntitlementType, ForbiddenOnboarder]]:
+ """Returns the dict representation of the actual instance"""
+ if self.actual_instance is None:
+ return None
+
+ if hasattr(self.actual_instance, "to_dict") and callable(self.actual_instance.to_dict):
+ return self.actual_instance.to_dict()
+ else:
+ # primitive type
+ return self.actual_instance
+
+ def to_str(self) -> str:
+ """Returns the string representation of the actual instance"""
+ return pprint.pformat(self.model_dump())
+
+
diff --git a/symphony/bdk/gen/federation_model/inline_response4031.py b/symphony/bdk/gen/federation_model/inline_response4031.py
new file mode 100644
index 00000000..228fef28
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/inline_response4031.py
@@ -0,0 +1,165 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import json
+import pprint
+from pydantic import BaseModel, ConfigDict, Field, StrictStr, ValidationError, field_validator
+from typing import Any, List, Optional
+from symphony.bdk.gen.federation_model.forbidden_entitlement_type import ForbiddenEntitlementType
+from symphony.bdk.gen.federation_model.multi_tenant_federated_user_update_attempt import MultiTenantFederatedUserUpdateAttempt
+from symphony.bdk.gen.federation_model.update_forbidden_for_advisor import UpdateForbiddenForAdvisor
+from symphony.bdk.gen.federation_model.update_forbidden_for_contact import UpdateForbiddenForContact
+from pydantic import StrictStr, Field
+from typing import Union, List, Set, Optional, Dict
+from typing_extensions import Literal, Self
+
+INLINERESPONSE4031_ONE_OF_SCHEMAS = ["ForbiddenEntitlementType", "MultiTenantFederatedUserUpdateAttempt", "UpdateForbiddenForAdvisor", "UpdateForbiddenForContact"]
+
+class InlineResponse4031(BaseModel):
+ """
+ InlineResponse4031
+ """
+ # data type: ForbiddenEntitlementType
+ oneof_schema_1_validator: Optional[ForbiddenEntitlementType] = None
+ # data type: UpdateForbiddenForAdvisor
+ oneof_schema_2_validator: Optional[UpdateForbiddenForAdvisor] = None
+ # data type: UpdateForbiddenForContact
+ oneof_schema_3_validator: Optional[UpdateForbiddenForContact] = None
+ # data type: MultiTenantFederatedUserUpdateAttempt
+ oneof_schema_4_validator: Optional[MultiTenantFederatedUserUpdateAttempt] = None
+ actual_instance: Optional[Union[ForbiddenEntitlementType, MultiTenantFederatedUserUpdateAttempt, UpdateForbiddenForAdvisor, UpdateForbiddenForContact]] = None
+ one_of_schemas: Set[str] = { "ForbiddenEntitlementType", "MultiTenantFederatedUserUpdateAttempt", "UpdateForbiddenForAdvisor", "UpdateForbiddenForContact" }
+
+ model_config = ConfigDict(
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def __init__(self, *args, **kwargs) -> None:
+ if args:
+ if len(args) > 1:
+ raise ValueError("If a position argument is used, only 1 is allowed to set `actual_instance`")
+ if kwargs:
+ raise ValueError("If a position argument is used, keyword arguments cannot be used.")
+ super().__init__(actual_instance=args[0])
+ else:
+ super().__init__(**kwargs)
+
+ @field_validator('actual_instance')
+ def actual_instance_must_validate_oneof(cls, v):
+ instance = InlineResponse4031.model_construct()
+ error_messages = []
+ match = 0
+ # validate data type: ForbiddenEntitlementType
+ if not isinstance(v, ForbiddenEntitlementType):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `ForbiddenEntitlementType`")
+ else:
+ match += 1
+ # validate data type: UpdateForbiddenForAdvisor
+ if not isinstance(v, UpdateForbiddenForAdvisor):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `UpdateForbiddenForAdvisor`")
+ else:
+ match += 1
+ # validate data type: UpdateForbiddenForContact
+ if not isinstance(v, UpdateForbiddenForContact):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `UpdateForbiddenForContact`")
+ else:
+ match += 1
+ # validate data type: MultiTenantFederatedUserUpdateAttempt
+ if not isinstance(v, MultiTenantFederatedUserUpdateAttempt):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `MultiTenantFederatedUserUpdateAttempt`")
+ else:
+ match += 1
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when setting `actual_instance` in InlineResponse4031 with oneOf schemas: ForbiddenEntitlementType, MultiTenantFederatedUserUpdateAttempt, UpdateForbiddenForAdvisor, UpdateForbiddenForContact. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when setting `actual_instance` in InlineResponse4031 with oneOf schemas: ForbiddenEntitlementType, MultiTenantFederatedUserUpdateAttempt, UpdateForbiddenForAdvisor, UpdateForbiddenForContact. Details: " + ", ".join(error_messages))
+ else:
+ return v
+
+ @classmethod
+ def from_dict(cls, obj: Union[str, Dict[str, Any]]) -> Self:
+ return cls.from_json(json.dumps(obj))
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Self:
+ """Returns the object represented by the json string"""
+ instance = cls.model_construct()
+ error_messages = []
+ match = 0
+
+ # deserialize data into ForbiddenEntitlementType
+ try:
+ instance.actual_instance = ForbiddenEntitlementType.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+ # deserialize data into UpdateForbiddenForAdvisor
+ try:
+ instance.actual_instance = UpdateForbiddenForAdvisor.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+ # deserialize data into UpdateForbiddenForContact
+ try:
+ instance.actual_instance = UpdateForbiddenForContact.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+ # deserialize data into MultiTenantFederatedUserUpdateAttempt
+ try:
+ instance.actual_instance = MultiTenantFederatedUserUpdateAttempt.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when deserializing the JSON string into InlineResponse4031 with oneOf schemas: ForbiddenEntitlementType, MultiTenantFederatedUserUpdateAttempt, UpdateForbiddenForAdvisor, UpdateForbiddenForContact. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when deserializing the JSON string into InlineResponse4031 with oneOf schemas: ForbiddenEntitlementType, MultiTenantFederatedUserUpdateAttempt, UpdateForbiddenForAdvisor, UpdateForbiddenForContact. Details: " + ", ".join(error_messages))
+ else:
+ return instance
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the actual instance"""
+ if self.actual_instance is None:
+ return "null"
+
+ if hasattr(self.actual_instance, "to_json") and callable(self.actual_instance.to_json):
+ return self.actual_instance.to_json()
+ else:
+ return json.dumps(self.actual_instance)
+
+ def to_dict(self) -> Optional[Union[Dict[str, Any], ForbiddenEntitlementType, MultiTenantFederatedUserUpdateAttempt, UpdateForbiddenForAdvisor, UpdateForbiddenForContact]]:
+ """Returns the dict representation of the actual instance"""
+ if self.actual_instance is None:
+ return None
+
+ if hasattr(self.actual_instance, "to_dict") and callable(self.actual_instance.to_dict):
+ return self.actual_instance.to_dict()
+ else:
+ # primitive type
+ return self.actual_instance
+
+ def to_str(self) -> str:
+ """Returns the string representation of the actual instance"""
+ return pprint.pformat(self.model_dump())
+
+
diff --git a/symphony/bdk/gen/federation_model/inline_response4032.py b/symphony/bdk/gen/federation_model/inline_response4032.py
new file mode 100644
index 00000000..8ed14838
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/inline_response4032.py
@@ -0,0 +1,137 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import json
+import pprint
+from pydantic import BaseModel, ConfigDict, Field, StrictStr, ValidationError, field_validator
+from typing import Any, List, Optional
+from symphony.bdk.gen.federation_model.forbidden_advisor import ForbiddenAdvisor
+from symphony.bdk.gen.federation_model.forbidden_entitlement_type import ForbiddenEntitlementType
+from pydantic import StrictStr, Field
+from typing import Union, List, Set, Optional, Dict
+from typing_extensions import Literal, Self
+
+INLINERESPONSE4032_ONE_OF_SCHEMAS = ["ForbiddenAdvisor", "ForbiddenEntitlementType"]
+
+class InlineResponse4032(BaseModel):
+ """
+ InlineResponse4032
+ """
+ # data type: ForbiddenAdvisor
+ oneof_schema_1_validator: Optional[ForbiddenAdvisor] = None
+ # data type: ForbiddenEntitlementType
+ oneof_schema_2_validator: Optional[ForbiddenEntitlementType] = None
+ actual_instance: Optional[Union[ForbiddenAdvisor, ForbiddenEntitlementType]] = None
+ one_of_schemas: Set[str] = { "ForbiddenAdvisor", "ForbiddenEntitlementType" }
+
+ model_config = ConfigDict(
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def __init__(self, *args, **kwargs) -> None:
+ if args:
+ if len(args) > 1:
+ raise ValueError("If a position argument is used, only 1 is allowed to set `actual_instance`")
+ if kwargs:
+ raise ValueError("If a position argument is used, keyword arguments cannot be used.")
+ super().__init__(actual_instance=args[0])
+ else:
+ super().__init__(**kwargs)
+
+ @field_validator('actual_instance')
+ def actual_instance_must_validate_oneof(cls, v):
+ instance = InlineResponse4032.model_construct()
+ error_messages = []
+ match = 0
+ # validate data type: ForbiddenAdvisor
+ if not isinstance(v, ForbiddenAdvisor):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `ForbiddenAdvisor`")
+ else:
+ match += 1
+ # validate data type: ForbiddenEntitlementType
+ if not isinstance(v, ForbiddenEntitlementType):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `ForbiddenEntitlementType`")
+ else:
+ match += 1
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when setting `actual_instance` in InlineResponse4032 with oneOf schemas: ForbiddenAdvisor, ForbiddenEntitlementType. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when setting `actual_instance` in InlineResponse4032 with oneOf schemas: ForbiddenAdvisor, ForbiddenEntitlementType. Details: " + ", ".join(error_messages))
+ else:
+ return v
+
+ @classmethod
+ def from_dict(cls, obj: Union[str, Dict[str, Any]]) -> Self:
+ return cls.from_json(json.dumps(obj))
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Self:
+ """Returns the object represented by the json string"""
+ instance = cls.model_construct()
+ error_messages = []
+ match = 0
+
+ # deserialize data into ForbiddenAdvisor
+ try:
+ instance.actual_instance = ForbiddenAdvisor.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+ # deserialize data into ForbiddenEntitlementType
+ try:
+ instance.actual_instance = ForbiddenEntitlementType.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when deserializing the JSON string into InlineResponse4032 with oneOf schemas: ForbiddenAdvisor, ForbiddenEntitlementType. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when deserializing the JSON string into InlineResponse4032 with oneOf schemas: ForbiddenAdvisor, ForbiddenEntitlementType. Details: " + ", ".join(error_messages))
+ else:
+ return instance
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the actual instance"""
+ if self.actual_instance is None:
+ return "null"
+
+ if hasattr(self.actual_instance, "to_json") and callable(self.actual_instance.to_json):
+ return self.actual_instance.to_json()
+ else:
+ return json.dumps(self.actual_instance)
+
+ def to_dict(self) -> Optional[Union[Dict[str, Any], ForbiddenAdvisor, ForbiddenEntitlementType]]:
+ """Returns the dict representation of the actual instance"""
+ if self.actual_instance is None:
+ return None
+
+ if hasattr(self.actual_instance, "to_dict") and callable(self.actual_instance.to_dict):
+ return self.actual_instance.to_dict()
+ else:
+ # primitive type
+ return self.actual_instance
+
+ def to_str(self) -> str:
+ """Returns the string representation of the actual instance"""
+ return pprint.pformat(self.model_dump())
+
+
diff --git a/symphony/bdk/gen/federation_model/inline_response4033.py b/symphony/bdk/gen/federation_model/inline_response4033.py
new file mode 100644
index 00000000..a6dedd57
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/inline_response4033.py
@@ -0,0 +1,151 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import json
+import pprint
+from pydantic import BaseModel, ConfigDict, Field, StrictStr, ValidationError, field_validator
+from typing import Any, List, Optional
+from symphony.bdk.gen.federation_model.forbidden_advisor import ForbiddenAdvisor
+from symphony.bdk.gen.federation_model.forbidden_entitlement_type import ForbiddenEntitlementType
+from symphony.bdk.gen.federation_model.remove_room_member_forbidden import RemoveRoomMemberForbidden
+from pydantic import StrictStr, Field
+from typing import Union, List, Set, Optional, Dict
+from typing_extensions import Literal, Self
+
+INLINERESPONSE4033_ONE_OF_SCHEMAS = ["ForbiddenAdvisor", "ForbiddenEntitlementType", "RemoveRoomMemberForbidden"]
+
+class InlineResponse4033(BaseModel):
+ """
+ InlineResponse4033
+ """
+ # data type: ForbiddenAdvisor
+ oneof_schema_1_validator: Optional[ForbiddenAdvisor] = None
+ # data type: RemoveRoomMemberForbidden
+ oneof_schema_2_validator: Optional[RemoveRoomMemberForbidden] = None
+ # data type: ForbiddenEntitlementType
+ oneof_schema_3_validator: Optional[ForbiddenEntitlementType] = None
+ actual_instance: Optional[Union[ForbiddenAdvisor, ForbiddenEntitlementType, RemoveRoomMemberForbidden]] = None
+ one_of_schemas: Set[str] = { "ForbiddenAdvisor", "ForbiddenEntitlementType", "RemoveRoomMemberForbidden" }
+
+ model_config = ConfigDict(
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def __init__(self, *args, **kwargs) -> None:
+ if args:
+ if len(args) > 1:
+ raise ValueError("If a position argument is used, only 1 is allowed to set `actual_instance`")
+ if kwargs:
+ raise ValueError("If a position argument is used, keyword arguments cannot be used.")
+ super().__init__(actual_instance=args[0])
+ else:
+ super().__init__(**kwargs)
+
+ @field_validator('actual_instance')
+ def actual_instance_must_validate_oneof(cls, v):
+ instance = InlineResponse4033.model_construct()
+ error_messages = []
+ match = 0
+ # validate data type: ForbiddenAdvisor
+ if not isinstance(v, ForbiddenAdvisor):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `ForbiddenAdvisor`")
+ else:
+ match += 1
+ # validate data type: RemoveRoomMemberForbidden
+ if not isinstance(v, RemoveRoomMemberForbidden):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `RemoveRoomMemberForbidden`")
+ else:
+ match += 1
+ # validate data type: ForbiddenEntitlementType
+ if not isinstance(v, ForbiddenEntitlementType):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `ForbiddenEntitlementType`")
+ else:
+ match += 1
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when setting `actual_instance` in InlineResponse4033 with oneOf schemas: ForbiddenAdvisor, ForbiddenEntitlementType, RemoveRoomMemberForbidden. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when setting `actual_instance` in InlineResponse4033 with oneOf schemas: ForbiddenAdvisor, ForbiddenEntitlementType, RemoveRoomMemberForbidden. Details: " + ", ".join(error_messages))
+ else:
+ return v
+
+ @classmethod
+ def from_dict(cls, obj: Union[str, Dict[str, Any]]) -> Self:
+ return cls.from_json(json.dumps(obj))
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Self:
+ """Returns the object represented by the json string"""
+ instance = cls.model_construct()
+ error_messages = []
+ match = 0
+
+ # deserialize data into ForbiddenAdvisor
+ try:
+ instance.actual_instance = ForbiddenAdvisor.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+ # deserialize data into RemoveRoomMemberForbidden
+ try:
+ instance.actual_instance = RemoveRoomMemberForbidden.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+ # deserialize data into ForbiddenEntitlementType
+ try:
+ instance.actual_instance = ForbiddenEntitlementType.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when deserializing the JSON string into InlineResponse4033 with oneOf schemas: ForbiddenAdvisor, ForbiddenEntitlementType, RemoveRoomMemberForbidden. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when deserializing the JSON string into InlineResponse4033 with oneOf schemas: ForbiddenAdvisor, ForbiddenEntitlementType, RemoveRoomMemberForbidden. Details: " + ", ".join(error_messages))
+ else:
+ return instance
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the actual instance"""
+ if self.actual_instance is None:
+ return "null"
+
+ if hasattr(self.actual_instance, "to_json") and callable(self.actual_instance.to_json):
+ return self.actual_instance.to_json()
+ else:
+ return json.dumps(self.actual_instance)
+
+ def to_dict(self) -> Optional[Union[Dict[str, Any], ForbiddenAdvisor, ForbiddenEntitlementType, RemoveRoomMemberForbidden]]:
+ """Returns the dict representation of the actual instance"""
+ if self.actual_instance is None:
+ return None
+
+ if hasattr(self.actual_instance, "to_dict") and callable(self.actual_instance.to_dict):
+ return self.actual_instance.to_dict()
+ else:
+ # primitive type
+ return self.actual_instance
+
+ def to_str(self) -> str:
+ """Returns the string representation of the actual instance"""
+ return pprint.pformat(self.model_dump())
+
+
diff --git a/symphony/bdk/gen/federation_model/inline_response4041.py b/symphony/bdk/gen/federation_model/inline_response4041.py
new file mode 100644
index 00000000..a4054909
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/inline_response4041.py
@@ -0,0 +1,137 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import json
+import pprint
+from pydantic import BaseModel, ConfigDict, Field, StrictStr, ValidationError, field_validator
+from typing import Any, List, Optional
+from symphony.bdk.gen.federation_model.advisor_not_found import AdvisorNotFound
+from symphony.bdk.gen.federation_model.contact_not_found import ContactNotFound
+from pydantic import StrictStr, Field
+from typing import Union, List, Set, Optional, Dict
+from typing_extensions import Literal, Self
+
+INLINERESPONSE4041_ONE_OF_SCHEMAS = ["AdvisorNotFound", "ContactNotFound"]
+
+class InlineResponse4041(BaseModel):
+ """
+ InlineResponse4041
+ """
+ # data type: AdvisorNotFound
+ oneof_schema_1_validator: Optional[AdvisorNotFound] = None
+ # data type: ContactNotFound
+ oneof_schema_2_validator: Optional[ContactNotFound] = None
+ actual_instance: Optional[Union[AdvisorNotFound, ContactNotFound]] = None
+ one_of_schemas: Set[str] = { "AdvisorNotFound", "ContactNotFound" }
+
+ model_config = ConfigDict(
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def __init__(self, *args, **kwargs) -> None:
+ if args:
+ if len(args) > 1:
+ raise ValueError("If a position argument is used, only 1 is allowed to set `actual_instance`")
+ if kwargs:
+ raise ValueError("If a position argument is used, keyword arguments cannot be used.")
+ super().__init__(actual_instance=args[0])
+ else:
+ super().__init__(**kwargs)
+
+ @field_validator('actual_instance')
+ def actual_instance_must_validate_oneof(cls, v):
+ instance = InlineResponse4041.model_construct()
+ error_messages = []
+ match = 0
+ # validate data type: AdvisorNotFound
+ if not isinstance(v, AdvisorNotFound):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `AdvisorNotFound`")
+ else:
+ match += 1
+ # validate data type: ContactNotFound
+ if not isinstance(v, ContactNotFound):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `ContactNotFound`")
+ else:
+ match += 1
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when setting `actual_instance` in InlineResponse4041 with oneOf schemas: AdvisorNotFound, ContactNotFound. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when setting `actual_instance` in InlineResponse4041 with oneOf schemas: AdvisorNotFound, ContactNotFound. Details: " + ", ".join(error_messages))
+ else:
+ return v
+
+ @classmethod
+ def from_dict(cls, obj: Union[str, Dict[str, Any]]) -> Self:
+ return cls.from_json(json.dumps(obj))
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Self:
+ """Returns the object represented by the json string"""
+ instance = cls.model_construct()
+ error_messages = []
+ match = 0
+
+ # deserialize data into AdvisorNotFound
+ try:
+ instance.actual_instance = AdvisorNotFound.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+ # deserialize data into ContactNotFound
+ try:
+ instance.actual_instance = ContactNotFound.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when deserializing the JSON string into InlineResponse4041 with oneOf schemas: AdvisorNotFound, ContactNotFound. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when deserializing the JSON string into InlineResponse4041 with oneOf schemas: AdvisorNotFound, ContactNotFound. Details: " + ", ".join(error_messages))
+ else:
+ return instance
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the actual instance"""
+ if self.actual_instance is None:
+ return "null"
+
+ if hasattr(self.actual_instance, "to_json") and callable(self.actual_instance.to_json):
+ return self.actual_instance.to_json()
+ else:
+ return json.dumps(self.actual_instance)
+
+ def to_dict(self) -> Optional[Union[Dict[str, Any], AdvisorNotFound, ContactNotFound]]:
+ """Returns the dict representation of the actual instance"""
+ if self.actual_instance is None:
+ return None
+
+ if hasattr(self.actual_instance, "to_dict") and callable(self.actual_instance.to_dict):
+ return self.actual_instance.to_dict()
+ else:
+ # primitive type
+ return self.actual_instance
+
+ def to_str(self) -> str:
+ """Returns the string representation of the actual instance"""
+ return pprint.pformat(self.model_dump())
+
+
diff --git a/symphony/bdk/gen/federation_model/inline_response4042.py b/symphony/bdk/gen/federation_model/inline_response4042.py
new file mode 100644
index 00000000..58b83bc2
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/inline_response4042.py
@@ -0,0 +1,151 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import json
+import pprint
+from pydantic import BaseModel, ConfigDict, Field, StrictStr, ValidationError, field_validator
+from typing import Any, List, Optional
+from symphony.bdk.gen.federation_model.advisor_not_found import AdvisorNotFound
+from symphony.bdk.gen.federation_model.permission_not_found import PermissionNotFound
+from symphony.bdk.gen.federation_model.tenant_configuration_not_found import TenantConfigurationNotFound
+from pydantic import StrictStr, Field
+from typing import Union, List, Set, Optional, Dict
+from typing_extensions import Literal, Self
+
+INLINERESPONSE4042_ONE_OF_SCHEMAS = ["AdvisorNotFound", "PermissionNotFound", "TenantConfigurationNotFound"]
+
+class InlineResponse4042(BaseModel):
+ """
+ InlineResponse4042
+ """
+ # data type: TenantConfigurationNotFound
+ oneof_schema_1_validator: Optional[TenantConfigurationNotFound] = None
+ # data type: AdvisorNotFound
+ oneof_schema_2_validator: Optional[AdvisorNotFound] = None
+ # data type: PermissionNotFound
+ oneof_schema_3_validator: Optional[PermissionNotFound] = None
+ actual_instance: Optional[Union[AdvisorNotFound, PermissionNotFound, TenantConfigurationNotFound]] = None
+ one_of_schemas: Set[str] = { "AdvisorNotFound", "PermissionNotFound", "TenantConfigurationNotFound" }
+
+ model_config = ConfigDict(
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def __init__(self, *args, **kwargs) -> None:
+ if args:
+ if len(args) > 1:
+ raise ValueError("If a position argument is used, only 1 is allowed to set `actual_instance`")
+ if kwargs:
+ raise ValueError("If a position argument is used, keyword arguments cannot be used.")
+ super().__init__(actual_instance=args[0])
+ else:
+ super().__init__(**kwargs)
+
+ @field_validator('actual_instance')
+ def actual_instance_must_validate_oneof(cls, v):
+ instance = InlineResponse4042.model_construct()
+ error_messages = []
+ match = 0
+ # validate data type: TenantConfigurationNotFound
+ if not isinstance(v, TenantConfigurationNotFound):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `TenantConfigurationNotFound`")
+ else:
+ match += 1
+ # validate data type: AdvisorNotFound
+ if not isinstance(v, AdvisorNotFound):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `AdvisorNotFound`")
+ else:
+ match += 1
+ # validate data type: PermissionNotFound
+ if not isinstance(v, PermissionNotFound):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `PermissionNotFound`")
+ else:
+ match += 1
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when setting `actual_instance` in InlineResponse4042 with oneOf schemas: AdvisorNotFound, PermissionNotFound, TenantConfigurationNotFound. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when setting `actual_instance` in InlineResponse4042 with oneOf schemas: AdvisorNotFound, PermissionNotFound, TenantConfigurationNotFound. Details: " + ", ".join(error_messages))
+ else:
+ return v
+
+ @classmethod
+ def from_dict(cls, obj: Union[str, Dict[str, Any]]) -> Self:
+ return cls.from_json(json.dumps(obj))
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Self:
+ """Returns the object represented by the json string"""
+ instance = cls.model_construct()
+ error_messages = []
+ match = 0
+
+ # deserialize data into TenantConfigurationNotFound
+ try:
+ instance.actual_instance = TenantConfigurationNotFound.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+ # deserialize data into AdvisorNotFound
+ try:
+ instance.actual_instance = AdvisorNotFound.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+ # deserialize data into PermissionNotFound
+ try:
+ instance.actual_instance = PermissionNotFound.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when deserializing the JSON string into InlineResponse4042 with oneOf schemas: AdvisorNotFound, PermissionNotFound, TenantConfigurationNotFound. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when deserializing the JSON string into InlineResponse4042 with oneOf schemas: AdvisorNotFound, PermissionNotFound, TenantConfigurationNotFound. Details: " + ", ".join(error_messages))
+ else:
+ return instance
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the actual instance"""
+ if self.actual_instance is None:
+ return "null"
+
+ if hasattr(self.actual_instance, "to_json") and callable(self.actual_instance.to_json):
+ return self.actual_instance.to_json()
+ else:
+ return json.dumps(self.actual_instance)
+
+ def to_dict(self) -> Optional[Union[Dict[str, Any], AdvisorNotFound, PermissionNotFound, TenantConfigurationNotFound]]:
+ """Returns the dict representation of the actual instance"""
+ if self.actual_instance is None:
+ return None
+
+ if hasattr(self.actual_instance, "to_dict") and callable(self.actual_instance.to_dict):
+ return self.actual_instance.to_dict()
+ else:
+ # primitive type
+ return self.actual_instance
+
+ def to_str(self) -> str:
+ """Returns the string representation of the actual instance"""
+ return pprint.pformat(self.model_dump())
+
+
diff --git a/symphony/bdk/gen/federation_model/inline_response4043.py b/symphony/bdk/gen/federation_model/inline_response4043.py
new file mode 100644
index 00000000..fb5b47f8
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/inline_response4043.py
@@ -0,0 +1,137 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import json
+import pprint
+from pydantic import BaseModel, ConfigDict, Field, StrictStr, ValidationError, field_validator
+from typing import Any, List, Optional
+from symphony.bdk.gen.federation_model.advisor_not_found import AdvisorNotFound
+from symphony.bdk.gen.federation_model.permission_not_found import PermissionNotFound
+from pydantic import StrictStr, Field
+from typing import Union, List, Set, Optional, Dict
+from typing_extensions import Literal, Self
+
+INLINERESPONSE4043_ONE_OF_SCHEMAS = ["AdvisorNotFound", "PermissionNotFound"]
+
+class InlineResponse4043(BaseModel):
+ """
+ InlineResponse4043
+ """
+ # data type: AdvisorNotFound
+ oneof_schema_1_validator: Optional[AdvisorNotFound] = None
+ # data type: PermissionNotFound
+ oneof_schema_2_validator: Optional[PermissionNotFound] = None
+ actual_instance: Optional[Union[AdvisorNotFound, PermissionNotFound]] = None
+ one_of_schemas: Set[str] = { "AdvisorNotFound", "PermissionNotFound" }
+
+ model_config = ConfigDict(
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def __init__(self, *args, **kwargs) -> None:
+ if args:
+ if len(args) > 1:
+ raise ValueError("If a position argument is used, only 1 is allowed to set `actual_instance`")
+ if kwargs:
+ raise ValueError("If a position argument is used, keyword arguments cannot be used.")
+ super().__init__(actual_instance=args[0])
+ else:
+ super().__init__(**kwargs)
+
+ @field_validator('actual_instance')
+ def actual_instance_must_validate_oneof(cls, v):
+ instance = InlineResponse4043.model_construct()
+ error_messages = []
+ match = 0
+ # validate data type: AdvisorNotFound
+ if not isinstance(v, AdvisorNotFound):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `AdvisorNotFound`")
+ else:
+ match += 1
+ # validate data type: PermissionNotFound
+ if not isinstance(v, PermissionNotFound):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `PermissionNotFound`")
+ else:
+ match += 1
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when setting `actual_instance` in InlineResponse4043 with oneOf schemas: AdvisorNotFound, PermissionNotFound. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when setting `actual_instance` in InlineResponse4043 with oneOf schemas: AdvisorNotFound, PermissionNotFound. Details: " + ", ".join(error_messages))
+ else:
+ return v
+
+ @classmethod
+ def from_dict(cls, obj: Union[str, Dict[str, Any]]) -> Self:
+ return cls.from_json(json.dumps(obj))
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Self:
+ """Returns the object represented by the json string"""
+ instance = cls.model_construct()
+ error_messages = []
+ match = 0
+
+ # deserialize data into AdvisorNotFound
+ try:
+ instance.actual_instance = AdvisorNotFound.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+ # deserialize data into PermissionNotFound
+ try:
+ instance.actual_instance = PermissionNotFound.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when deserializing the JSON string into InlineResponse4043 with oneOf schemas: AdvisorNotFound, PermissionNotFound. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when deserializing the JSON string into InlineResponse4043 with oneOf schemas: AdvisorNotFound, PermissionNotFound. Details: " + ", ".join(error_messages))
+ else:
+ return instance
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the actual instance"""
+ if self.actual_instance is None:
+ return "null"
+
+ if hasattr(self.actual_instance, "to_json") and callable(self.actual_instance.to_json):
+ return self.actual_instance.to_json()
+ else:
+ return json.dumps(self.actual_instance)
+
+ def to_dict(self) -> Optional[Union[Dict[str, Any], AdvisorNotFound, PermissionNotFound]]:
+ """Returns the dict representation of the actual instance"""
+ if self.actual_instance is None:
+ return None
+
+ if hasattr(self.actual_instance, "to_dict") and callable(self.actual_instance.to_dict):
+ return self.actual_instance.to_dict()
+ else:
+ # primitive type
+ return self.actual_instance
+
+ def to_str(self) -> str:
+ """Returns the string representation of the actual instance"""
+ return pprint.pformat(self.model_dump())
+
+
diff --git a/symphony/bdk/gen/federation_model/inline_response4044.py b/symphony/bdk/gen/federation_model/inline_response4044.py
new file mode 100644
index 00000000..8e9df4bf
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/inline_response4044.py
@@ -0,0 +1,151 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import json
+import pprint
+from pydantic import BaseModel, ConfigDict, Field, StrictStr, ValidationError, field_validator
+from typing import Any, List, Optional
+from symphony.bdk.gen.federation_model.advisor_not_found import AdvisorNotFound
+from symphony.bdk.gen.federation_model.contact_not_found import ContactNotFound
+from symphony.bdk.gen.federation_model.tenant_configuration_not_found import TenantConfigurationNotFound
+from pydantic import StrictStr, Field
+from typing import Union, List, Set, Optional, Dict
+from typing_extensions import Literal, Self
+
+INLINERESPONSE4044_ONE_OF_SCHEMAS = ["AdvisorNotFound", "ContactNotFound", "TenantConfigurationNotFound"]
+
+class InlineResponse4044(BaseModel):
+ """
+ InlineResponse4044
+ """
+ # data type: TenantConfigurationNotFound
+ oneof_schema_1_validator: Optional[TenantConfigurationNotFound] = None
+ # data type: ContactNotFound
+ oneof_schema_2_validator: Optional[ContactNotFound] = None
+ # data type: AdvisorNotFound
+ oneof_schema_3_validator: Optional[AdvisorNotFound] = None
+ actual_instance: Optional[Union[AdvisorNotFound, ContactNotFound, TenantConfigurationNotFound]] = None
+ one_of_schemas: Set[str] = { "AdvisorNotFound", "ContactNotFound", "TenantConfigurationNotFound" }
+
+ model_config = ConfigDict(
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def __init__(self, *args, **kwargs) -> None:
+ if args:
+ if len(args) > 1:
+ raise ValueError("If a position argument is used, only 1 is allowed to set `actual_instance`")
+ if kwargs:
+ raise ValueError("If a position argument is used, keyword arguments cannot be used.")
+ super().__init__(actual_instance=args[0])
+ else:
+ super().__init__(**kwargs)
+
+ @field_validator('actual_instance')
+ def actual_instance_must_validate_oneof(cls, v):
+ instance = InlineResponse4044.model_construct()
+ error_messages = []
+ match = 0
+ # validate data type: TenantConfigurationNotFound
+ if not isinstance(v, TenantConfigurationNotFound):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `TenantConfigurationNotFound`")
+ else:
+ match += 1
+ # validate data type: ContactNotFound
+ if not isinstance(v, ContactNotFound):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `ContactNotFound`")
+ else:
+ match += 1
+ # validate data type: AdvisorNotFound
+ if not isinstance(v, AdvisorNotFound):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `AdvisorNotFound`")
+ else:
+ match += 1
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when setting `actual_instance` in InlineResponse4044 with oneOf schemas: AdvisorNotFound, ContactNotFound, TenantConfigurationNotFound. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when setting `actual_instance` in InlineResponse4044 with oneOf schemas: AdvisorNotFound, ContactNotFound, TenantConfigurationNotFound. Details: " + ", ".join(error_messages))
+ else:
+ return v
+
+ @classmethod
+ def from_dict(cls, obj: Union[str, Dict[str, Any]]) -> Self:
+ return cls.from_json(json.dumps(obj))
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Self:
+ """Returns the object represented by the json string"""
+ instance = cls.model_construct()
+ error_messages = []
+ match = 0
+
+ # deserialize data into TenantConfigurationNotFound
+ try:
+ instance.actual_instance = TenantConfigurationNotFound.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+ # deserialize data into ContactNotFound
+ try:
+ instance.actual_instance = ContactNotFound.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+ # deserialize data into AdvisorNotFound
+ try:
+ instance.actual_instance = AdvisorNotFound.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when deserializing the JSON string into InlineResponse4044 with oneOf schemas: AdvisorNotFound, ContactNotFound, TenantConfigurationNotFound. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when deserializing the JSON string into InlineResponse4044 with oneOf schemas: AdvisorNotFound, ContactNotFound, TenantConfigurationNotFound. Details: " + ", ".join(error_messages))
+ else:
+ return instance
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the actual instance"""
+ if self.actual_instance is None:
+ return "null"
+
+ if hasattr(self.actual_instance, "to_json") and callable(self.actual_instance.to_json):
+ return self.actual_instance.to_json()
+ else:
+ return json.dumps(self.actual_instance)
+
+ def to_dict(self) -> Optional[Union[Dict[str, Any], AdvisorNotFound, ContactNotFound, TenantConfigurationNotFound]]:
+ """Returns the dict representation of the actual instance"""
+ if self.actual_instance is None:
+ return None
+
+ if hasattr(self.actual_instance, "to_dict") and callable(self.actual_instance.to_dict):
+ return self.actual_instance.to_dict()
+ else:
+ # primitive type
+ return self.actual_instance
+
+ def to_str(self) -> str:
+ """Returns the string representation of the actual instance"""
+ return pprint.pformat(self.model_dump())
+
+
diff --git a/symphony/bdk/gen/federation_model/inline_response4047.py b/symphony/bdk/gen/federation_model/inline_response4047.py
new file mode 100644
index 00000000..9e213693
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/inline_response4047.py
@@ -0,0 +1,165 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import json
+import pprint
+from pydantic import BaseModel, ConfigDict, Field, StrictStr, ValidationError, field_validator
+from typing import Any, List, Optional
+from symphony.bdk.gen.federation_model.advisor_not_found import AdvisorNotFound
+from symphony.bdk.gen.federation_model.contact_not_found import ContactNotFound
+from symphony.bdk.gen.federation_model.federated_account_not_found import FederatedAccountNotFound
+from symphony.bdk.gen.federation_model.tenant_configuration_not_found import TenantConfigurationNotFound
+from pydantic import StrictStr, Field
+from typing import Union, List, Set, Optional, Dict
+from typing_extensions import Literal, Self
+
+INLINERESPONSE4047_ONE_OF_SCHEMAS = ["AdvisorNotFound", "ContactNotFound", "FederatedAccountNotFound", "TenantConfigurationNotFound"]
+
+class InlineResponse4047(BaseModel):
+ """
+ InlineResponse4047
+ """
+ # data type: TenantConfigurationNotFound
+ oneof_schema_1_validator: Optional[TenantConfigurationNotFound] = None
+ # data type: AdvisorNotFound
+ oneof_schema_2_validator: Optional[AdvisorNotFound] = None
+ # data type: FederatedAccountNotFound
+ oneof_schema_3_validator: Optional[FederatedAccountNotFound] = None
+ # data type: ContactNotFound
+ oneof_schema_4_validator: Optional[ContactNotFound] = None
+ actual_instance: Optional[Union[AdvisorNotFound, ContactNotFound, FederatedAccountNotFound, TenantConfigurationNotFound]] = None
+ one_of_schemas: Set[str] = { "AdvisorNotFound", "ContactNotFound", "FederatedAccountNotFound", "TenantConfigurationNotFound" }
+
+ model_config = ConfigDict(
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def __init__(self, *args, **kwargs) -> None:
+ if args:
+ if len(args) > 1:
+ raise ValueError("If a position argument is used, only 1 is allowed to set `actual_instance`")
+ if kwargs:
+ raise ValueError("If a position argument is used, keyword arguments cannot be used.")
+ super().__init__(actual_instance=args[0])
+ else:
+ super().__init__(**kwargs)
+
+ @field_validator('actual_instance')
+ def actual_instance_must_validate_oneof(cls, v):
+ instance = InlineResponse4047.model_construct()
+ error_messages = []
+ match = 0
+ # validate data type: TenantConfigurationNotFound
+ if not isinstance(v, TenantConfigurationNotFound):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `TenantConfigurationNotFound`")
+ else:
+ match += 1
+ # validate data type: AdvisorNotFound
+ if not isinstance(v, AdvisorNotFound):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `AdvisorNotFound`")
+ else:
+ match += 1
+ # validate data type: FederatedAccountNotFound
+ if not isinstance(v, FederatedAccountNotFound):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `FederatedAccountNotFound`")
+ else:
+ match += 1
+ # validate data type: ContactNotFound
+ if not isinstance(v, ContactNotFound):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `ContactNotFound`")
+ else:
+ match += 1
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when setting `actual_instance` in InlineResponse4047 with oneOf schemas: AdvisorNotFound, ContactNotFound, FederatedAccountNotFound, TenantConfigurationNotFound. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when setting `actual_instance` in InlineResponse4047 with oneOf schemas: AdvisorNotFound, ContactNotFound, FederatedAccountNotFound, TenantConfigurationNotFound. Details: " + ", ".join(error_messages))
+ else:
+ return v
+
+ @classmethod
+ def from_dict(cls, obj: Union[str, Dict[str, Any]]) -> Self:
+ return cls.from_json(json.dumps(obj))
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Self:
+ """Returns the object represented by the json string"""
+ instance = cls.model_construct()
+ error_messages = []
+ match = 0
+
+ # deserialize data into TenantConfigurationNotFound
+ try:
+ instance.actual_instance = TenantConfigurationNotFound.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+ # deserialize data into AdvisorNotFound
+ try:
+ instance.actual_instance = AdvisorNotFound.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+ # deserialize data into FederatedAccountNotFound
+ try:
+ instance.actual_instance = FederatedAccountNotFound.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+ # deserialize data into ContactNotFound
+ try:
+ instance.actual_instance = ContactNotFound.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when deserializing the JSON string into InlineResponse4047 with oneOf schemas: AdvisorNotFound, ContactNotFound, FederatedAccountNotFound, TenantConfigurationNotFound. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when deserializing the JSON string into InlineResponse4047 with oneOf schemas: AdvisorNotFound, ContactNotFound, FederatedAccountNotFound, TenantConfigurationNotFound. Details: " + ", ".join(error_messages))
+ else:
+ return instance
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the actual instance"""
+ if self.actual_instance is None:
+ return "null"
+
+ if hasattr(self.actual_instance, "to_json") and callable(self.actual_instance.to_json):
+ return self.actual_instance.to_json()
+ else:
+ return json.dumps(self.actual_instance)
+
+ def to_dict(self) -> Optional[Union[Dict[str, Any], AdvisorNotFound, ContactNotFound, FederatedAccountNotFound, TenantConfigurationNotFound]]:
+ """Returns the dict representation of the actual instance"""
+ if self.actual_instance is None:
+ return None
+
+ if hasattr(self.actual_instance, "to_dict") and callable(self.actual_instance.to_dict):
+ return self.actual_instance.to_dict()
+ else:
+ # primitive type
+ return self.actual_instance
+
+ def to_str(self) -> str:
+ """Returns the string representation of the actual instance"""
+ return pprint.pformat(self.model_dump())
+
+
diff --git a/symphony/bdk/gen/federation_model/inline_response4048.py b/symphony/bdk/gen/federation_model/inline_response4048.py
new file mode 100644
index 00000000..7567c1b0
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/inline_response4048.py
@@ -0,0 +1,165 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import json
+import pprint
+from pydantic import BaseModel, ConfigDict, Field, StrictStr, ValidationError, field_validator
+from typing import Any, List, Optional
+from symphony.bdk.gen.federation_model.advisor_not_found import AdvisorNotFound
+from symphony.bdk.gen.federation_model.room_member_not_found import RoomMemberNotFound
+from symphony.bdk.gen.federation_model.room_not_found import RoomNotFound
+from symphony.bdk.gen.federation_model.tenant_configuration_not_found import TenantConfigurationNotFound
+from pydantic import StrictStr, Field
+from typing import Union, List, Set, Optional, Dict
+from typing_extensions import Literal, Self
+
+INLINERESPONSE4048_ONE_OF_SCHEMAS = ["AdvisorNotFound", "RoomMemberNotFound", "RoomNotFound", "TenantConfigurationNotFound"]
+
+class InlineResponse4048(BaseModel):
+ """
+ InlineResponse4048
+ """
+ # data type: RoomNotFound
+ oneof_schema_1_validator: Optional[RoomNotFound] = None
+ # data type: RoomMemberNotFound
+ oneof_schema_2_validator: Optional[RoomMemberNotFound] = None
+ # data type: AdvisorNotFound
+ oneof_schema_3_validator: Optional[AdvisorNotFound] = None
+ # data type: TenantConfigurationNotFound
+ oneof_schema_4_validator: Optional[TenantConfigurationNotFound] = None
+ actual_instance: Optional[Union[AdvisorNotFound, RoomMemberNotFound, RoomNotFound, TenantConfigurationNotFound]] = None
+ one_of_schemas: Set[str] = { "AdvisorNotFound", "RoomMemberNotFound", "RoomNotFound", "TenantConfigurationNotFound" }
+
+ model_config = ConfigDict(
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def __init__(self, *args, **kwargs) -> None:
+ if args:
+ if len(args) > 1:
+ raise ValueError("If a position argument is used, only 1 is allowed to set `actual_instance`")
+ if kwargs:
+ raise ValueError("If a position argument is used, keyword arguments cannot be used.")
+ super().__init__(actual_instance=args[0])
+ else:
+ super().__init__(**kwargs)
+
+ @field_validator('actual_instance')
+ def actual_instance_must_validate_oneof(cls, v):
+ instance = InlineResponse4048.model_construct()
+ error_messages = []
+ match = 0
+ # validate data type: RoomNotFound
+ if not isinstance(v, RoomNotFound):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `RoomNotFound`")
+ else:
+ match += 1
+ # validate data type: RoomMemberNotFound
+ if not isinstance(v, RoomMemberNotFound):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `RoomMemberNotFound`")
+ else:
+ match += 1
+ # validate data type: AdvisorNotFound
+ if not isinstance(v, AdvisorNotFound):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `AdvisorNotFound`")
+ else:
+ match += 1
+ # validate data type: TenantConfigurationNotFound
+ if not isinstance(v, TenantConfigurationNotFound):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `TenantConfigurationNotFound`")
+ else:
+ match += 1
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when setting `actual_instance` in InlineResponse4048 with oneOf schemas: AdvisorNotFound, RoomMemberNotFound, RoomNotFound, TenantConfigurationNotFound. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when setting `actual_instance` in InlineResponse4048 with oneOf schemas: AdvisorNotFound, RoomMemberNotFound, RoomNotFound, TenantConfigurationNotFound. Details: " + ", ".join(error_messages))
+ else:
+ return v
+
+ @classmethod
+ def from_dict(cls, obj: Union[str, Dict[str, Any]]) -> Self:
+ return cls.from_json(json.dumps(obj))
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Self:
+ """Returns the object represented by the json string"""
+ instance = cls.model_construct()
+ error_messages = []
+ match = 0
+
+ # deserialize data into RoomNotFound
+ try:
+ instance.actual_instance = RoomNotFound.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+ # deserialize data into RoomMemberNotFound
+ try:
+ instance.actual_instance = RoomMemberNotFound.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+ # deserialize data into AdvisorNotFound
+ try:
+ instance.actual_instance = AdvisorNotFound.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+ # deserialize data into TenantConfigurationNotFound
+ try:
+ instance.actual_instance = TenantConfigurationNotFound.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when deserializing the JSON string into InlineResponse4048 with oneOf schemas: AdvisorNotFound, RoomMemberNotFound, RoomNotFound, TenantConfigurationNotFound. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when deserializing the JSON string into InlineResponse4048 with oneOf schemas: AdvisorNotFound, RoomMemberNotFound, RoomNotFound, TenantConfigurationNotFound. Details: " + ", ".join(error_messages))
+ else:
+ return instance
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the actual instance"""
+ if self.actual_instance is None:
+ return "null"
+
+ if hasattr(self.actual_instance, "to_json") and callable(self.actual_instance.to_json):
+ return self.actual_instance.to_json()
+ else:
+ return json.dumps(self.actual_instance)
+
+ def to_dict(self) -> Optional[Union[Dict[str, Any], AdvisorNotFound, RoomMemberNotFound, RoomNotFound, TenantConfigurationNotFound]]:
+ """Returns the dict representation of the actual instance"""
+ if self.actual_instance is None:
+ return None
+
+ if hasattr(self.actual_instance, "to_dict") and callable(self.actual_instance.to_dict):
+ return self.actual_instance.to_dict()
+ else:
+ # primitive type
+ return self.actual_instance
+
+ def to_str(self) -> str:
+ """Returns the string representation of the actual instance"""
+ return pprint.pformat(self.model_dump())
+
+
diff --git a/symphony/bdk/gen/federation_model/inline_response4049.py b/symphony/bdk/gen/federation_model/inline_response4049.py
new file mode 100644
index 00000000..1f1b8e41
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/inline_response4049.py
@@ -0,0 +1,151 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import json
+import pprint
+from pydantic import BaseModel, ConfigDict, Field, StrictStr, ValidationError, field_validator
+from typing import Any, List, Optional
+from symphony.bdk.gen.federation_model.advisor_not_found import AdvisorNotFound
+from symphony.bdk.gen.federation_model.room_not_found import RoomNotFound
+from symphony.bdk.gen.federation_model.tenant_configuration_not_found import TenantConfigurationNotFound
+from pydantic import StrictStr, Field
+from typing import Union, List, Set, Optional, Dict
+from typing_extensions import Literal, Self
+
+INLINERESPONSE4049_ONE_OF_SCHEMAS = ["AdvisorNotFound", "RoomNotFound", "TenantConfigurationNotFound"]
+
+class InlineResponse4049(BaseModel):
+ """
+ InlineResponse4049
+ """
+ # data type: TenantConfigurationNotFound
+ oneof_schema_1_validator: Optional[TenantConfigurationNotFound] = None
+ # data type: AdvisorNotFound
+ oneof_schema_2_validator: Optional[AdvisorNotFound] = None
+ # data type: RoomNotFound
+ oneof_schema_3_validator: Optional[RoomNotFound] = None
+ actual_instance: Optional[Union[AdvisorNotFound, RoomNotFound, TenantConfigurationNotFound]] = None
+ one_of_schemas: Set[str] = { "AdvisorNotFound", "RoomNotFound", "TenantConfigurationNotFound" }
+
+ model_config = ConfigDict(
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def __init__(self, *args, **kwargs) -> None:
+ if args:
+ if len(args) > 1:
+ raise ValueError("If a position argument is used, only 1 is allowed to set `actual_instance`")
+ if kwargs:
+ raise ValueError("If a position argument is used, keyword arguments cannot be used.")
+ super().__init__(actual_instance=args[0])
+ else:
+ super().__init__(**kwargs)
+
+ @field_validator('actual_instance')
+ def actual_instance_must_validate_oneof(cls, v):
+ instance = InlineResponse4049.model_construct()
+ error_messages = []
+ match = 0
+ # validate data type: TenantConfigurationNotFound
+ if not isinstance(v, TenantConfigurationNotFound):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `TenantConfigurationNotFound`")
+ else:
+ match += 1
+ # validate data type: AdvisorNotFound
+ if not isinstance(v, AdvisorNotFound):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `AdvisorNotFound`")
+ else:
+ match += 1
+ # validate data type: RoomNotFound
+ if not isinstance(v, RoomNotFound):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `RoomNotFound`")
+ else:
+ match += 1
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when setting `actual_instance` in InlineResponse4049 with oneOf schemas: AdvisorNotFound, RoomNotFound, TenantConfigurationNotFound. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when setting `actual_instance` in InlineResponse4049 with oneOf schemas: AdvisorNotFound, RoomNotFound, TenantConfigurationNotFound. Details: " + ", ".join(error_messages))
+ else:
+ return v
+
+ @classmethod
+ def from_dict(cls, obj: Union[str, Dict[str, Any]]) -> Self:
+ return cls.from_json(json.dumps(obj))
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Self:
+ """Returns the object represented by the json string"""
+ instance = cls.model_construct()
+ error_messages = []
+ match = 0
+
+ # deserialize data into TenantConfigurationNotFound
+ try:
+ instance.actual_instance = TenantConfigurationNotFound.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+ # deserialize data into AdvisorNotFound
+ try:
+ instance.actual_instance = AdvisorNotFound.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+ # deserialize data into RoomNotFound
+ try:
+ instance.actual_instance = RoomNotFound.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when deserializing the JSON string into InlineResponse4049 with oneOf schemas: AdvisorNotFound, RoomNotFound, TenantConfigurationNotFound. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when deserializing the JSON string into InlineResponse4049 with oneOf schemas: AdvisorNotFound, RoomNotFound, TenantConfigurationNotFound. Details: " + ", ".join(error_messages))
+ else:
+ return instance
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the actual instance"""
+ if self.actual_instance is None:
+ return "null"
+
+ if hasattr(self.actual_instance, "to_json") and callable(self.actual_instance.to_json):
+ return self.actual_instance.to_json()
+ else:
+ return json.dumps(self.actual_instance)
+
+ def to_dict(self) -> Optional[Union[Dict[str, Any], AdvisorNotFound, RoomNotFound, TenantConfigurationNotFound]]:
+ """Returns the dict representation of the actual instance"""
+ if self.actual_instance is None:
+ return None
+
+ if hasattr(self.actual_instance, "to_dict") and callable(self.actual_instance.to_dict):
+ return self.actual_instance.to_dict()
+ else:
+ # primitive type
+ return self.actual_instance
+
+ def to_str(self) -> str:
+ """Returns the string representation of the actual instance"""
+ return pprint.pformat(self.model_dump())
+
+
diff --git a/symphony/bdk/gen/federation_model/inline_response409.py b/symphony/bdk/gen/federation_model/inline_response409.py
new file mode 100644
index 00000000..ecb7dd6a
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/inline_response409.py
@@ -0,0 +1,137 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import json
+import pprint
+from pydantic import BaseModel, ConfigDict, Field, StrictStr, ValidationError, field_validator
+from typing import Any, List, Optional
+from symphony.bdk.gen.federation_model.user_already_exists import UserAlreadyExists
+from symphony.bdk.gen.federation_model.user_already_onboarded import UserAlreadyOnboarded
+from pydantic import StrictStr, Field
+from typing import Union, List, Set, Optional, Dict
+from typing_extensions import Literal, Self
+
+INLINERESPONSE409_ONE_OF_SCHEMAS = ["UserAlreadyExists", "UserAlreadyOnboarded"]
+
+class InlineResponse409(BaseModel):
+ """
+ InlineResponse409
+ """
+ # data type: UserAlreadyOnboarded
+ oneof_schema_1_validator: Optional[UserAlreadyOnboarded] = None
+ # data type: UserAlreadyExists
+ oneof_schema_2_validator: Optional[UserAlreadyExists] = None
+ actual_instance: Optional[Union[UserAlreadyExists, UserAlreadyOnboarded]] = None
+ one_of_schemas: Set[str] = { "UserAlreadyExists", "UserAlreadyOnboarded" }
+
+ model_config = ConfigDict(
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def __init__(self, *args, **kwargs) -> None:
+ if args:
+ if len(args) > 1:
+ raise ValueError("If a position argument is used, only 1 is allowed to set `actual_instance`")
+ if kwargs:
+ raise ValueError("If a position argument is used, keyword arguments cannot be used.")
+ super().__init__(actual_instance=args[0])
+ else:
+ super().__init__(**kwargs)
+
+ @field_validator('actual_instance')
+ def actual_instance_must_validate_oneof(cls, v):
+ instance = InlineResponse409.model_construct()
+ error_messages = []
+ match = 0
+ # validate data type: UserAlreadyOnboarded
+ if not isinstance(v, UserAlreadyOnboarded):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `UserAlreadyOnboarded`")
+ else:
+ match += 1
+ # validate data type: UserAlreadyExists
+ if not isinstance(v, UserAlreadyExists):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `UserAlreadyExists`")
+ else:
+ match += 1
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when setting `actual_instance` in InlineResponse409 with oneOf schemas: UserAlreadyExists, UserAlreadyOnboarded. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when setting `actual_instance` in InlineResponse409 with oneOf schemas: UserAlreadyExists, UserAlreadyOnboarded. Details: " + ", ".join(error_messages))
+ else:
+ return v
+
+ @classmethod
+ def from_dict(cls, obj: Union[str, Dict[str, Any]]) -> Self:
+ return cls.from_json(json.dumps(obj))
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Self:
+ """Returns the object represented by the json string"""
+ instance = cls.model_construct()
+ error_messages = []
+ match = 0
+
+ # deserialize data into UserAlreadyOnboarded
+ try:
+ instance.actual_instance = UserAlreadyOnboarded.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+ # deserialize data into UserAlreadyExists
+ try:
+ instance.actual_instance = UserAlreadyExists.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when deserializing the JSON string into InlineResponse409 with oneOf schemas: UserAlreadyExists, UserAlreadyOnboarded. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when deserializing the JSON string into InlineResponse409 with oneOf schemas: UserAlreadyExists, UserAlreadyOnboarded. Details: " + ", ".join(error_messages))
+ else:
+ return instance
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the actual instance"""
+ if self.actual_instance is None:
+ return "null"
+
+ if hasattr(self.actual_instance, "to_json") and callable(self.actual_instance.to_json):
+ return self.actual_instance.to_json()
+ else:
+ return json.dumps(self.actual_instance)
+
+ def to_dict(self) -> Optional[Union[Dict[str, Any], UserAlreadyExists, UserAlreadyOnboarded]]:
+ """Returns the dict representation of the actual instance"""
+ if self.actual_instance is None:
+ return None
+
+ if hasattr(self.actual_instance, "to_dict") and callable(self.actual_instance.to_dict):
+ return self.actual_instance.to_dict()
+ else:
+ # primitive type
+ return self.actual_instance
+
+ def to_str(self) -> str:
+ """Returns the string representation of the actual instance"""
+ return pprint.pformat(self.model_dump())
+
+
diff --git a/symphony/bdk/gen/federation_model/inline_response500.py b/symphony/bdk/gen/federation_model/inline_response500.py
new file mode 100644
index 00000000..bb56e933
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/inline_response500.py
@@ -0,0 +1,137 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import json
+import pprint
+from pydantic import BaseModel, ConfigDict, Field, StrictStr, ValidationError, field_validator
+from typing import Any, List, Optional
+from symphony.bdk.gen.federation_model.create_room_failed import CreateRoomFailed
+from symphony.bdk.gen.federation_model.missing_connection_with_connect_bot import MissingConnectionWithConnectBot
+from pydantic import StrictStr, Field
+from typing import Union, List, Set, Optional, Dict
+from typing_extensions import Literal, Self
+
+INLINERESPONSE500_ONE_OF_SCHEMAS = ["CreateRoomFailed", "MissingConnectionWithConnectBot"]
+
+class InlineResponse500(BaseModel):
+ """
+ InlineResponse500
+ """
+ # data type: CreateRoomFailed
+ oneof_schema_1_validator: Optional[CreateRoomFailed] = None
+ # data type: MissingConnectionWithConnectBot
+ oneof_schema_2_validator: Optional[MissingConnectionWithConnectBot] = None
+ actual_instance: Optional[Union[CreateRoomFailed, MissingConnectionWithConnectBot]] = None
+ one_of_schemas: Set[str] = { "CreateRoomFailed", "MissingConnectionWithConnectBot" }
+
+ model_config = ConfigDict(
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def __init__(self, *args, **kwargs) -> None:
+ if args:
+ if len(args) > 1:
+ raise ValueError("If a position argument is used, only 1 is allowed to set `actual_instance`")
+ if kwargs:
+ raise ValueError("If a position argument is used, keyword arguments cannot be used.")
+ super().__init__(actual_instance=args[0])
+ else:
+ super().__init__(**kwargs)
+
+ @field_validator('actual_instance')
+ def actual_instance_must_validate_oneof(cls, v):
+ instance = InlineResponse500.model_construct()
+ error_messages = []
+ match = 0
+ # validate data type: CreateRoomFailed
+ if not isinstance(v, CreateRoomFailed):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `CreateRoomFailed`")
+ else:
+ match += 1
+ # validate data type: MissingConnectionWithConnectBot
+ if not isinstance(v, MissingConnectionWithConnectBot):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `MissingConnectionWithConnectBot`")
+ else:
+ match += 1
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when setting `actual_instance` in InlineResponse500 with oneOf schemas: CreateRoomFailed, MissingConnectionWithConnectBot. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when setting `actual_instance` in InlineResponse500 with oneOf schemas: CreateRoomFailed, MissingConnectionWithConnectBot. Details: " + ", ".join(error_messages))
+ else:
+ return v
+
+ @classmethod
+ def from_dict(cls, obj: Union[str, Dict[str, Any]]) -> Self:
+ return cls.from_json(json.dumps(obj))
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Self:
+ """Returns the object represented by the json string"""
+ instance = cls.model_construct()
+ error_messages = []
+ match = 0
+
+ # deserialize data into CreateRoomFailed
+ try:
+ instance.actual_instance = CreateRoomFailed.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+ # deserialize data into MissingConnectionWithConnectBot
+ try:
+ instance.actual_instance = MissingConnectionWithConnectBot.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when deserializing the JSON string into InlineResponse500 with oneOf schemas: CreateRoomFailed, MissingConnectionWithConnectBot. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when deserializing the JSON string into InlineResponse500 with oneOf schemas: CreateRoomFailed, MissingConnectionWithConnectBot. Details: " + ", ".join(error_messages))
+ else:
+ return instance
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the actual instance"""
+ if self.actual_instance is None:
+ return "null"
+
+ if hasattr(self.actual_instance, "to_json") and callable(self.actual_instance.to_json):
+ return self.actual_instance.to_json()
+ else:
+ return json.dumps(self.actual_instance)
+
+ def to_dict(self) -> Optional[Union[Dict[str, Any], CreateRoomFailed, MissingConnectionWithConnectBot]]:
+ """Returns the dict representation of the actual instance"""
+ if self.actual_instance is None:
+ return None
+
+ if hasattr(self.actual_instance, "to_dict") and callable(self.actual_instance.to_dict):
+ return self.actual_instance.to_dict()
+ else:
+ # primitive type
+ return self.actual_instance
+
+ def to_str(self) -> str:
+ """Returns the string representation of the actual instance"""
+ return pprint.pformat(self.model_dump())
+
+
diff --git a/symphony/bdk/gen/federation_model/invalid_page_cursor.py b/symphony/bdk/gen/federation_model/invalid_page_cursor.py
new file mode 100644
index 00000000..c1989dc1
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/invalid_page_cursor.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class InvalidPageCursor(BaseModel):
+ """
+ The provided cursor key is invalid or expired
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of InvalidPageCursor from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of InvalidPageCursor from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/invalid_user_info.py b/symphony/bdk/gen/federation_model/invalid_user_info.py
new file mode 100644
index 00000000..3016fae1
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/invalid_user_info.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class InvalidUserInfo(BaseModel):
+ """
+ Invalid user information
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of InvalidUserInfo from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of InvalidUserInfo from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/invite_already_confirmed.py b/symphony/bdk/gen/federation_model/invite_already_confirmed.py
new file mode 100644
index 00000000..c344f1f9
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/invite_already_confirmed.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class InviteAlreadyConfirmed(BaseModel):
+ """
+ Invite is already confirmed.
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of InviteAlreadyConfirmed from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of InviteAlreadyConfirmed from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/invites_not_configured_on_emp.py b/symphony/bdk/gen/federation_model/invites_not_configured_on_emp.py
new file mode 100644
index 00000000..d00c6d3f
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/invites_not_configured_on_emp.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class InvitesNotConfiguredOnEmp(BaseModel):
+ """
+ Invites not configured on EMP
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of InvitesNotConfiguredOnEmp from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of InvitesNotConfiguredOnEmp from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/list_available_emp_channel_connectors404_response.py b/symphony/bdk/gen/federation_model/list_available_emp_channel_connectors404_response.py
new file mode 100644
index 00000000..22599e85
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/list_available_emp_channel_connectors404_response.py
@@ -0,0 +1,151 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import json
+import pprint
+from pydantic import BaseModel, ConfigDict, Field, StrictStr, ValidationError, field_validator
+from typing import Any, List, Optional
+from symphony.bdk.gen.federation_model.contact_not_found import ContactNotFound
+from symphony.bdk.gen.federation_model.federation_group_not_found import FederationGroupNotFound
+from symphony.bdk.gen.federation_model.tenant_not_found import TenantNotFound
+from pydantic import StrictStr, Field
+from typing import Union, List, Set, Optional, Dict
+from typing_extensions import Literal, Self
+
+LISTAVAILABLEEMPCHANNELCONNECTORS404RESPONSE_ONE_OF_SCHEMAS = ["ContactNotFound", "FederationGroupNotFound", "TenantNotFound"]
+
+class ListAvailableEmpChannelConnectors404Response(BaseModel):
+ """
+ ListAvailableEmpChannelConnectors404Response
+ """
+ # data type: FederationGroupNotFound
+ oneof_schema_1_validator: Optional[FederationGroupNotFound] = None
+ # data type: TenantNotFound
+ oneof_schema_2_validator: Optional[TenantNotFound] = None
+ # data type: ContactNotFound
+ oneof_schema_3_validator: Optional[ContactNotFound] = None
+ actual_instance: Optional[Union[ContactNotFound, FederationGroupNotFound, TenantNotFound]] = None
+ one_of_schemas: Set[str] = { "ContactNotFound", "FederationGroupNotFound", "TenantNotFound" }
+
+ model_config = ConfigDict(
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def __init__(self, *args, **kwargs) -> None:
+ if args:
+ if len(args) > 1:
+ raise ValueError("If a position argument is used, only 1 is allowed to set `actual_instance`")
+ if kwargs:
+ raise ValueError("If a position argument is used, keyword arguments cannot be used.")
+ super().__init__(actual_instance=args[0])
+ else:
+ super().__init__(**kwargs)
+
+ @field_validator('actual_instance')
+ def actual_instance_must_validate_oneof(cls, v):
+ instance = ListAvailableEmpChannelConnectors404Response.model_construct()
+ error_messages = []
+ match = 0
+ # validate data type: FederationGroupNotFound
+ if not isinstance(v, FederationGroupNotFound):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `FederationGroupNotFound`")
+ else:
+ match += 1
+ # validate data type: TenantNotFound
+ if not isinstance(v, TenantNotFound):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `TenantNotFound`")
+ else:
+ match += 1
+ # validate data type: ContactNotFound
+ if not isinstance(v, ContactNotFound):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `ContactNotFound`")
+ else:
+ match += 1
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when setting `actual_instance` in ListAvailableEmpChannelConnectors404Response with oneOf schemas: ContactNotFound, FederationGroupNotFound, TenantNotFound. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when setting `actual_instance` in ListAvailableEmpChannelConnectors404Response with oneOf schemas: ContactNotFound, FederationGroupNotFound, TenantNotFound. Details: " + ", ".join(error_messages))
+ else:
+ return v
+
+ @classmethod
+ def from_dict(cls, obj: Union[str, Dict[str, Any]]) -> Self:
+ return cls.from_json(json.dumps(obj))
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Self:
+ """Returns the object represented by the json string"""
+ instance = cls.model_construct()
+ error_messages = []
+ match = 0
+
+ # deserialize data into FederationGroupNotFound
+ try:
+ instance.actual_instance = FederationGroupNotFound.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+ # deserialize data into TenantNotFound
+ try:
+ instance.actual_instance = TenantNotFound.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+ # deserialize data into ContactNotFound
+ try:
+ instance.actual_instance = ContactNotFound.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when deserializing the JSON string into ListAvailableEmpChannelConnectors404Response with oneOf schemas: ContactNotFound, FederationGroupNotFound, TenantNotFound. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when deserializing the JSON string into ListAvailableEmpChannelConnectors404Response with oneOf schemas: ContactNotFound, FederationGroupNotFound, TenantNotFound. Details: " + ", ".join(error_messages))
+ else:
+ return instance
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the actual instance"""
+ if self.actual_instance is None:
+ return "null"
+
+ if hasattr(self.actual_instance, "to_json") and callable(self.actual_instance.to_json):
+ return self.actual_instance.to_json()
+ else:
+ return json.dumps(self.actual_instance)
+
+ def to_dict(self) -> Optional[Union[Dict[str, Any], ContactNotFound, FederationGroupNotFound, TenantNotFound]]:
+ """Returns the dict representation of the actual instance"""
+ if self.actual_instance is None:
+ return None
+
+ if hasattr(self.actual_instance, "to_dict") and callable(self.actual_instance.to_dict):
+ return self.actual_instance.to_dict()
+ else:
+ # primitive type
+ return self.actual_instance
+
+ def to_str(self) -> str:
+ """Returns the string representation of the actual instance"""
+ return pprint.pformat(self.model_dump())
+
+
diff --git a/symphony/bdk/gen/federation_model/list_contact_response.py b/symphony/bdk/gen/federation_model/list_contact_response.py
new file mode 100644
index 00000000..e99a626f
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/list_contact_response.py
@@ -0,0 +1,101 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict
+from typing import Any, ClassVar, Dict, List, Optional
+from symphony.bdk.gen.federation_model.find_contact_response_v2_with_block_status import FindContactResponseV2WithBlockStatus
+from symphony.bdk.gen.federation_model.pagination import Pagination
+from typing import Optional, Set
+from typing_extensions import Self
+
+class ListContactResponse(BaseModel):
+ """
+ ListContactResponse
+ """ # noqa: E501
+ contacts: Optional[List[FindContactResponseV2WithBlockStatus]] = None
+ pagination: Optional[Pagination] = None
+ __properties: ClassVar[List[str]] = ["contacts", "pagination"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of ListContactResponse from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ # override the default output from pydantic by calling `to_dict()` of each item in contacts (list)
+ _items = []
+ if self.contacts:
+ for _item_contacts in self.contacts:
+ if _item_contacts:
+ _items.append(_item_contacts.to_dict())
+ _dict['contacts'] = _items
+ # override the default output from pydantic by calling `to_dict()` of pagination
+ if self.pagination:
+ _dict['pagination'] = self.pagination.to_dict()
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of ListContactResponse from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "contacts": [FindContactResponseV2WithBlockStatus.from_dict(_item) for _item in obj["contacts"]] if obj.get("contacts") is not None else None,
+ "pagination": Pagination.from_dict(obj["pagination"]) if obj.get("pagination") is not None else None
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/list_contacts2403_response.py b/symphony/bdk/gen/federation_model/list_contacts2403_response.py
new file mode 100644
index 00000000..6205fdb7
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/list_contacts2403_response.py
@@ -0,0 +1,137 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import json
+import pprint
+from pydantic import BaseModel, ConfigDict, Field, StrictStr, ValidationError, field_validator
+from typing import Any, List, Optional
+from symphony.bdk.gen.federation_model.forbidden import Forbidden
+from symphony.bdk.gen.federation_model.user_id_mismatch import UserIdMismatch
+from pydantic import StrictStr, Field
+from typing import Union, List, Set, Optional, Dict
+from typing_extensions import Literal, Self
+
+LISTCONTACTS2403RESPONSE_ONE_OF_SCHEMAS = ["Forbidden", "UserIdMismatch"]
+
+class ListContacts2403Response(BaseModel):
+ """
+ ListContacts2403Response
+ """
+ # data type: Forbidden
+ oneof_schema_1_validator: Optional[Forbidden] = None
+ # data type: UserIdMismatch
+ oneof_schema_2_validator: Optional[UserIdMismatch] = None
+ actual_instance: Optional[Union[Forbidden, UserIdMismatch]] = None
+ one_of_schemas: Set[str] = { "Forbidden", "UserIdMismatch" }
+
+ model_config = ConfigDict(
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def __init__(self, *args, **kwargs) -> None:
+ if args:
+ if len(args) > 1:
+ raise ValueError("If a position argument is used, only 1 is allowed to set `actual_instance`")
+ if kwargs:
+ raise ValueError("If a position argument is used, keyword arguments cannot be used.")
+ super().__init__(actual_instance=args[0])
+ else:
+ super().__init__(**kwargs)
+
+ @field_validator('actual_instance')
+ def actual_instance_must_validate_oneof(cls, v):
+ instance = ListContacts2403Response.model_construct()
+ error_messages = []
+ match = 0
+ # validate data type: Forbidden
+ if not isinstance(v, Forbidden):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `Forbidden`")
+ else:
+ match += 1
+ # validate data type: UserIdMismatch
+ if not isinstance(v, UserIdMismatch):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `UserIdMismatch`")
+ else:
+ match += 1
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when setting `actual_instance` in ListContacts2403Response with oneOf schemas: Forbidden, UserIdMismatch. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when setting `actual_instance` in ListContacts2403Response with oneOf schemas: Forbidden, UserIdMismatch. Details: " + ", ".join(error_messages))
+ else:
+ return v
+
+ @classmethod
+ def from_dict(cls, obj: Union[str, Dict[str, Any]]) -> Self:
+ return cls.from_json(json.dumps(obj))
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Self:
+ """Returns the object represented by the json string"""
+ instance = cls.model_construct()
+ error_messages = []
+ match = 0
+
+ # deserialize data into Forbidden
+ try:
+ instance.actual_instance = Forbidden.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+ # deserialize data into UserIdMismatch
+ try:
+ instance.actual_instance = UserIdMismatch.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when deserializing the JSON string into ListContacts2403Response with oneOf schemas: Forbidden, UserIdMismatch. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when deserializing the JSON string into ListContacts2403Response with oneOf schemas: Forbidden, UserIdMismatch. Details: " + ", ".join(error_messages))
+ else:
+ return instance
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the actual instance"""
+ if self.actual_instance is None:
+ return "null"
+
+ if hasattr(self.actual_instance, "to_json") and callable(self.actual_instance.to_json):
+ return self.actual_instance.to_json()
+ else:
+ return json.dumps(self.actual_instance)
+
+ def to_dict(self) -> Optional[Union[Dict[str, Any], Forbidden, UserIdMismatch]]:
+ """Returns the dict representation of the actual instance"""
+ if self.actual_instance is None:
+ return None
+
+ if hasattr(self.actual_instance, "to_dict") and callable(self.actual_instance.to_dict):
+ return self.actual_instance.to_dict()
+ else:
+ # primitive type
+ return self.actual_instance
+
+ def to_str(self) -> str:
+ """Returns the string representation of the actual instance"""
+ return pprint.pformat(self.model_dump())
+
+
diff --git a/symphony/bdk/gen/federation_model/list_contacts2404_response.py b/symphony/bdk/gen/federation_model/list_contacts2404_response.py
new file mode 100644
index 00000000..c01d6109
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/list_contacts2404_response.py
@@ -0,0 +1,137 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import json
+import pprint
+from pydantic import BaseModel, ConfigDict, Field, StrictStr, ValidationError, field_validator
+from typing import Any, List, Optional
+from symphony.bdk.gen.federation_model.contact_not_found import ContactNotFound
+from symphony.bdk.gen.federation_model.tenant_not_found import TenantNotFound
+from pydantic import StrictStr, Field
+from typing import Union, List, Set, Optional, Dict
+from typing_extensions import Literal, Self
+
+LISTCONTACTS2404RESPONSE_ONE_OF_SCHEMAS = ["ContactNotFound", "TenantNotFound"]
+
+class ListContacts2404Response(BaseModel):
+ """
+ ListContacts2404Response
+ """
+ # data type: ContactNotFound
+ oneof_schema_1_validator: Optional[ContactNotFound] = None
+ # data type: TenantNotFound
+ oneof_schema_2_validator: Optional[TenantNotFound] = None
+ actual_instance: Optional[Union[ContactNotFound, TenantNotFound]] = None
+ one_of_schemas: Set[str] = { "ContactNotFound", "TenantNotFound" }
+
+ model_config = ConfigDict(
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def __init__(self, *args, **kwargs) -> None:
+ if args:
+ if len(args) > 1:
+ raise ValueError("If a position argument is used, only 1 is allowed to set `actual_instance`")
+ if kwargs:
+ raise ValueError("If a position argument is used, keyword arguments cannot be used.")
+ super().__init__(actual_instance=args[0])
+ else:
+ super().__init__(**kwargs)
+
+ @field_validator('actual_instance')
+ def actual_instance_must_validate_oneof(cls, v):
+ instance = ListContacts2404Response.model_construct()
+ error_messages = []
+ match = 0
+ # validate data type: ContactNotFound
+ if not isinstance(v, ContactNotFound):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `ContactNotFound`")
+ else:
+ match += 1
+ # validate data type: TenantNotFound
+ if not isinstance(v, TenantNotFound):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `TenantNotFound`")
+ else:
+ match += 1
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when setting `actual_instance` in ListContacts2404Response with oneOf schemas: ContactNotFound, TenantNotFound. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when setting `actual_instance` in ListContacts2404Response with oneOf schemas: ContactNotFound, TenantNotFound. Details: " + ", ".join(error_messages))
+ else:
+ return v
+
+ @classmethod
+ def from_dict(cls, obj: Union[str, Dict[str, Any]]) -> Self:
+ return cls.from_json(json.dumps(obj))
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Self:
+ """Returns the object represented by the json string"""
+ instance = cls.model_construct()
+ error_messages = []
+ match = 0
+
+ # deserialize data into ContactNotFound
+ try:
+ instance.actual_instance = ContactNotFound.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+ # deserialize data into TenantNotFound
+ try:
+ instance.actual_instance = TenantNotFound.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when deserializing the JSON string into ListContacts2404Response with oneOf schemas: ContactNotFound, TenantNotFound. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when deserializing the JSON string into ListContacts2404Response with oneOf schemas: ContactNotFound, TenantNotFound. Details: " + ", ".join(error_messages))
+ else:
+ return instance
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the actual instance"""
+ if self.actual_instance is None:
+ return "null"
+
+ if hasattr(self.actual_instance, "to_json") and callable(self.actual_instance.to_json):
+ return self.actual_instance.to_json()
+ else:
+ return json.dumps(self.actual_instance)
+
+ def to_dict(self) -> Optional[Union[Dict[str, Any], ContactNotFound, TenantNotFound]]:
+ """Returns the dict representation of the actual instance"""
+ if self.actual_instance is None:
+ return None
+
+ if hasattr(self.actual_instance, "to_dict") and callable(self.actual_instance.to_dict):
+ return self.actual_instance.to_dict()
+ else:
+ # primitive type
+ return self.actual_instance
+
+ def to_str(self) -> str:
+ """Returns the string representation of the actual instance"""
+ return pprint.pformat(self.model_dump())
+
+
diff --git a/symphony/bdk/gen/federation_model/list_emp_channel_connector_response.py b/symphony/bdk/gen/federation_model/list_emp_channel_connector_response.py
new file mode 100644
index 00000000..faa480f1
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/list_emp_channel_connector_response.py
@@ -0,0 +1,95 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, Field
+from typing import Any, ClassVar, Dict, List, Optional
+from symphony.bdk.gen.federation_model.emp_channel_connector_response import EmpChannelConnectorResponse
+from typing import Optional, Set
+from typing_extensions import Self
+
+class ListEmpChannelConnectorResponse(BaseModel):
+ """
+ ListEmpChannelConnectorResponse
+ """ # noqa: E501
+ emp_channel_connectors: Optional[List[EmpChannelConnectorResponse]] = Field(default=None, alias="empChannelConnectors")
+ __properties: ClassVar[List[str]] = ["empChannelConnectors"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of ListEmpChannelConnectorResponse from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ # override the default output from pydantic by calling `to_dict()` of each item in emp_channel_connectors (list)
+ _items = []
+ if self.emp_channel_connectors:
+ for _item_emp_channel_connectors in self.emp_channel_connectors:
+ if _item_emp_channel_connectors:
+ _items.append(_item_emp_channel_connectors.to_dict())
+ _dict['empChannelConnectors'] = _items
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of ListEmpChannelConnectorResponse from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "empChannelConnectors": [EmpChannelConnectorResponse.from_dict(_item) for _item in obj["empChannelConnectors"]] if obj.get("empChannelConnectors") is not None else None
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/list_federation_groups_item_response.py b/symphony/bdk/gen/federation_model/list_federation_groups_item_response.py
new file mode 100644
index 00000000..ecbb17b8
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/list_federation_groups_item_response.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, Field, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class ListFederationGroupsItemResponse(BaseModel):
+ """
+ ListFederationGroupsItemResponse
+ """ # noqa: E501
+ federation_group_id: Optional[StrictStr] = Field(default=None, description="Internal system federation group identifier", alias="federationGroupId")
+ federation_group_name: Optional[StrictStr] = Field(default=None, description="Out facing customer display name", alias="federationGroupName")
+ active_external_networks: Optional[List[StrictStr]] = Field(default=None, description="List of activated external network for the federation group", alias="activeExternalNetworks")
+ __properties: ClassVar[List[str]] = ["federationGroupId", "federationGroupName", "activeExternalNetworks"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of ListFederationGroupsItemResponse from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of ListFederationGroupsItemResponse from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "federationGroupId": obj.get("federationGroupId"),
+ "federationGroupName": obj.get("federationGroupName"),
+ "activeExternalNetworks": obj.get("activeExternalNetworks")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/list_federation_groups_response.py b/symphony/bdk/gen/federation_model/list_federation_groups_response.py
new file mode 100644
index 00000000..01149975
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/list_federation_groups_response.py
@@ -0,0 +1,101 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, Field
+from typing import Any, ClassVar, Dict, List, Optional
+from symphony.bdk.gen.federation_model.list_federation_groups_item_response import ListFederationGroupsItemResponse
+from symphony.bdk.gen.federation_model.pagination import Pagination
+from typing import Optional, Set
+from typing_extensions import Self
+
+class ListFederationGroupsResponse(BaseModel):
+ """
+ ListFederationGroupsResponse
+ """ # noqa: E501
+ federation_groups: Optional[List[ListFederationGroupsItemResponse]] = Field(default=None, alias="federationGroups")
+ pagination: Optional[Pagination] = None
+ __properties: ClassVar[List[str]] = ["federationGroups", "pagination"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of ListFederationGroupsResponse from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ # override the default output from pydantic by calling `to_dict()` of each item in federation_groups (list)
+ _items = []
+ if self.federation_groups:
+ for _item_federation_groups in self.federation_groups:
+ if _item_federation_groups:
+ _items.append(_item_federation_groups.to_dict())
+ _dict['federationGroups'] = _items
+ # override the default output from pydantic by calling `to_dict()` of pagination
+ if self.pagination:
+ _dict['pagination'] = self.pagination.to_dict()
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of ListFederationGroupsResponse from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "federationGroups": [ListFederationGroupsItemResponse.from_dict(_item) for _item in obj["federationGroups"]] if obj.get("federationGroups") is not None else None,
+ "pagination": Pagination.from_dict(obj["pagination"]) if obj.get("pagination") is not None else None
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/list_roomsv2404_response.py b/symphony/bdk/gen/federation_model/list_roomsv2404_response.py
new file mode 100644
index 00000000..f47a09d6
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/list_roomsv2404_response.py
@@ -0,0 +1,137 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import json
+import pprint
+from pydantic import BaseModel, ConfigDict, Field, StrictStr, ValidationError, field_validator
+from typing import Any, List, Optional
+from symphony.bdk.gen.federation_model.advisor_not_found import AdvisorNotFound
+from symphony.bdk.gen.federation_model.tenant_configuration_not_found import TenantConfigurationNotFound
+from pydantic import StrictStr, Field
+from typing import Union, List, Set, Optional, Dict
+from typing_extensions import Literal, Self
+
+LISTROOMSV2404RESPONSE_ONE_OF_SCHEMAS = ["AdvisorNotFound", "TenantConfigurationNotFound"]
+
+class ListRoomsv2404Response(BaseModel):
+ """
+ ListRoomsv2404Response
+ """
+ # data type: TenantConfigurationNotFound
+ oneof_schema_1_validator: Optional[TenantConfigurationNotFound] = None
+ # data type: AdvisorNotFound
+ oneof_schema_2_validator: Optional[AdvisorNotFound] = None
+ actual_instance: Optional[Union[AdvisorNotFound, TenantConfigurationNotFound]] = None
+ one_of_schemas: Set[str] = { "AdvisorNotFound", "TenantConfigurationNotFound" }
+
+ model_config = ConfigDict(
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def __init__(self, *args, **kwargs) -> None:
+ if args:
+ if len(args) > 1:
+ raise ValueError("If a position argument is used, only 1 is allowed to set `actual_instance`")
+ if kwargs:
+ raise ValueError("If a position argument is used, keyword arguments cannot be used.")
+ super().__init__(actual_instance=args[0])
+ else:
+ super().__init__(**kwargs)
+
+ @field_validator('actual_instance')
+ def actual_instance_must_validate_oneof(cls, v):
+ instance = ListRoomsv2404Response.model_construct()
+ error_messages = []
+ match = 0
+ # validate data type: TenantConfigurationNotFound
+ if not isinstance(v, TenantConfigurationNotFound):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `TenantConfigurationNotFound`")
+ else:
+ match += 1
+ # validate data type: AdvisorNotFound
+ if not isinstance(v, AdvisorNotFound):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `AdvisorNotFound`")
+ else:
+ match += 1
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when setting `actual_instance` in ListRoomsv2404Response with oneOf schemas: AdvisorNotFound, TenantConfigurationNotFound. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when setting `actual_instance` in ListRoomsv2404Response with oneOf schemas: AdvisorNotFound, TenantConfigurationNotFound. Details: " + ", ".join(error_messages))
+ else:
+ return v
+
+ @classmethod
+ def from_dict(cls, obj: Union[str, Dict[str, Any]]) -> Self:
+ return cls.from_json(json.dumps(obj))
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Self:
+ """Returns the object represented by the json string"""
+ instance = cls.model_construct()
+ error_messages = []
+ match = 0
+
+ # deserialize data into TenantConfigurationNotFound
+ try:
+ instance.actual_instance = TenantConfigurationNotFound.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+ # deserialize data into AdvisorNotFound
+ try:
+ instance.actual_instance = AdvisorNotFound.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when deserializing the JSON string into ListRoomsv2404Response with oneOf schemas: AdvisorNotFound, TenantConfigurationNotFound. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when deserializing the JSON string into ListRoomsv2404Response with oneOf schemas: AdvisorNotFound, TenantConfigurationNotFound. Details: " + ", ".join(error_messages))
+ else:
+ return instance
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the actual instance"""
+ if self.actual_instance is None:
+ return "null"
+
+ if hasattr(self.actual_instance, "to_json") and callable(self.actual_instance.to_json):
+ return self.actual_instance.to_json()
+ else:
+ return json.dumps(self.actual_instance)
+
+ def to_dict(self) -> Optional[Union[Dict[str, Any], AdvisorNotFound, TenantConfigurationNotFound]]:
+ """Returns the dict representation of the actual instance"""
+ if self.actual_instance is None:
+ return None
+
+ if hasattr(self.actual_instance, "to_dict") and callable(self.actual_instance.to_dict):
+ return self.actual_instance.to_dict()
+ else:
+ # primitive type
+ return self.actual_instance
+
+ def to_str(self) -> str:
+ """Returns the string representation of the actual instance"""
+ return pprint.pformat(self.model_dump())
+
+
diff --git a/symphony/bdk/gen/federation_model/member_already_in_room.py b/symphony/bdk/gen/federation_model/member_already_in_room.py
new file mode 100644
index 00000000..cbd545b5
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/member_already_in_room.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class MemberAlreadyInRoom(BaseModel):
+ """
+ Member already in room.
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of MemberAlreadyInRoom from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of MemberAlreadyInRoom from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/missing_connection_with_connect_bot.py b/symphony/bdk/gen/federation_model/missing_connection_with_connect_bot.py
new file mode 100644
index 00000000..b4443bb5
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/missing_connection_with_connect_bot.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class MissingConnectionWithConnectBot(BaseModel):
+ """
+ Connection with Symphony Connect Assistant does not exist
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of MissingConnectionWithConnectBot from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of MissingConnectionWithConnectBot from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/missing_destination_federation_group.py b/symphony/bdk/gen/federation_model/missing_destination_federation_group.py
new file mode 100644
index 00000000..d26c053a
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/missing_destination_federation_group.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class MissingDestinationFederationGroup(BaseModel):
+ """
+ MissingDestinationFederationGroup
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of MissingDestinationFederationGroup from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of MissingDestinationFederationGroup from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/multi_company_room_not_supported.py b/symphony/bdk/gen/federation_model/multi_company_room_not_supported.py
new file mode 100644
index 00000000..f7503e89
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/multi_company_room_not_supported.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class MultiCompanyRoomNotSupported(BaseModel):
+ """
+ Multi-Company rooms are not supported.
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of MultiCompanyRoomNotSupported from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of MultiCompanyRoomNotSupported from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/multi_external_network_room_not_supported.py b/symphony/bdk/gen/federation_model/multi_external_network_room_not_supported.py
new file mode 100644
index 00000000..4b31a223
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/multi_external_network_room_not_supported.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class MultiExternalNetworkRoomNotSupported(BaseModel):
+ """
+ Multi-External network rooms are not supported.
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of MultiExternalNetworkRoomNotSupported from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of MultiExternalNetworkRoomNotSupported from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/multi_tenant_federated_user_update_attempt.py b/symphony/bdk/gen/federation_model/multi_tenant_federated_user_update_attempt.py
new file mode 100644
index 00000000..940b90d1
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/multi_tenant_federated_user_update_attempt.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class MultiTenantFederatedUserUpdateAttempt(BaseModel):
+ """
+ Found Contact records spanning across more than one tenant.
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of MultiTenantFederatedUserUpdateAttempt from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of MultiTenantFederatedUserUpdateAttempt from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/multiple_advisor_permission_response.py b/symphony/bdk/gen/federation_model/multiple_advisor_permission_response.py
new file mode 100644
index 00000000..9ab6b751
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/multiple_advisor_permission_response.py
@@ -0,0 +1,95 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, Field
+from typing import Any, ClassVar, Dict, List, Optional
+from symphony.bdk.gen.federation_model.multiple_advisor_permission_response_advisors_permissions_inner import MultipleAdvisorPermissionResponseAdvisorsPermissionsInner
+from typing import Optional, Set
+from typing_extensions import Self
+
+class MultipleAdvisorPermissionResponse(BaseModel):
+ """
+ MultipleAdvisorPermissionResponse
+ """ # noqa: E501
+ advisors_permissions: Optional[List[MultipleAdvisorPermissionResponseAdvisorsPermissionsInner]] = Field(default=None, alias="advisorsPermissions")
+ __properties: ClassVar[List[str]] = ["advisorsPermissions"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of MultipleAdvisorPermissionResponse from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ # override the default output from pydantic by calling `to_dict()` of each item in advisors_permissions (list)
+ _items = []
+ if self.advisors_permissions:
+ for _item_advisors_permissions in self.advisors_permissions:
+ if _item_advisors_permissions:
+ _items.append(_item_advisors_permissions.to_dict())
+ _dict['advisorsPermissions'] = _items
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of MultipleAdvisorPermissionResponse from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "advisorsPermissions": [MultipleAdvisorPermissionResponseAdvisorsPermissionsInner.from_dict(_item) for _item in obj["advisorsPermissions"]] if obj.get("advisorsPermissions") is not None else None
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/multiple_advisor_permission_response_advisors_permissions_inner.py b/symphony/bdk/gen/federation_model/multiple_advisor_permission_response_advisors_permissions_inner.py
new file mode 100644
index 00000000..d311788f
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/multiple_advisor_permission_response_advisors_permissions_inner.py
@@ -0,0 +1,99 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt
+from typing import Any, ClassVar, Dict, List, Optional
+from symphony.bdk.gen.federation_model.multiple_advisor_permission_response_advisors_permissions_inner_error import MultipleAdvisorPermissionResponseAdvisorsPermissionsInnerError
+from symphony.bdk.gen.federation_model.multiple_advisor_permission_response_advisors_permissions_inner_response import MultipleAdvisorPermissionResponseAdvisorsPermissionsInnerResponse
+from typing import Optional, Set
+from typing_extensions import Self
+
+class MultipleAdvisorPermissionResponseAdvisorsPermissionsInner(BaseModel):
+ """
+ MultipleAdvisorPermissionResponseAdvisorsPermissionsInner
+ """ # noqa: E501
+ status: Optional[StrictInt] = None
+ response: Optional[MultipleAdvisorPermissionResponseAdvisorsPermissionsInnerResponse] = None
+ error: Optional[MultipleAdvisorPermissionResponseAdvisorsPermissionsInnerError] = None
+ __properties: ClassVar[List[str]] = ["status", "response", "error"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of MultipleAdvisorPermissionResponseAdvisorsPermissionsInner from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ # override the default output from pydantic by calling `to_dict()` of response
+ if self.response:
+ _dict['response'] = self.response.to_dict()
+ # override the default output from pydantic by calling `to_dict()` of error
+ if self.error:
+ _dict['error'] = self.error.to_dict()
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of MultipleAdvisorPermissionResponseAdvisorsPermissionsInner from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "status": obj.get("status"),
+ "response": MultipleAdvisorPermissionResponseAdvisorsPermissionsInnerResponse.from_dict(obj["response"]) if obj.get("response") is not None else None,
+ "error": MultipleAdvisorPermissionResponseAdvisorsPermissionsInnerError.from_dict(obj["error"]) if obj.get("error") is not None else None
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/multiple_advisor_permission_response_advisors_permissions_inner_error.py b/symphony/bdk/gen/federation_model/multiple_advisor_permission_response_advisors_permissions_inner_error.py
new file mode 100644
index 00000000..81d4f021
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/multiple_advisor_permission_response_advisors_permissions_inner_error.py
@@ -0,0 +1,89 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class MultipleAdvisorPermissionResponseAdvisorsPermissionsInnerError(BaseModel):
+ """
+ Should an error occur while adding or removing the permission, this returned object will provide details about the error(s)
+ """ # noqa: E501
+ title: Optional[StrictStr] = None
+ detail: Optional[StrictStr] = None
+ __properties: ClassVar[List[str]] = ["title", "detail"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of MultipleAdvisorPermissionResponseAdvisorsPermissionsInnerError from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of MultipleAdvisorPermissionResponseAdvisorsPermissionsInnerError from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "title": obj.get("title"),
+ "detail": obj.get("detail")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/multiple_advisor_permission_response_advisors_permissions_inner_response.py b/symphony/bdk/gen/federation_model/multiple_advisor_permission_response_advisors_permissions_inner_response.py
new file mode 100644
index 00000000..08329fad
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/multiple_advisor_permission_response_advisors_permissions_inner_response.py
@@ -0,0 +1,97 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, Field, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from symphony.bdk.gen.federation_model.multiple_advisor_permission_response_advisors_permissions_inner_response_permission import MultipleAdvisorPermissionResponseAdvisorsPermissionsInnerResponsePermission
+from typing import Optional, Set
+from typing_extensions import Self
+
+class MultipleAdvisorPermissionResponseAdvisorsPermissionsInnerResponse(BaseModel):
+ """
+ MultipleAdvisorPermissionResponseAdvisorsPermissionsInnerResponse
+ """ # noqa: E501
+ advisor_symphony_id: Optional[StrictStr] = Field(default=None, description="Symphony user ID of the advisor", alias="advisorSymphonyId")
+ email: Optional[StrictStr] = Field(default=None, description="email adress of the advisor")
+ external_network: Optional[StrictStr] = Field(default=None, description="WHATSAPP", alias="externalNetwork")
+ permission: Optional[MultipleAdvisorPermissionResponseAdvisorsPermissionsInnerResponsePermission] = None
+ __properties: ClassVar[List[str]] = ["advisorSymphonyId", "email", "externalNetwork", "permission"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of MultipleAdvisorPermissionResponseAdvisorsPermissionsInnerResponse from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ # override the default output from pydantic by calling `to_dict()` of permission
+ if self.permission:
+ _dict['permission'] = self.permission.to_dict()
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of MultipleAdvisorPermissionResponseAdvisorsPermissionsInnerResponse from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "advisorSymphonyId": obj.get("advisorSymphonyId"),
+ "email": obj.get("email"),
+ "externalNetwork": obj.get("externalNetwork"),
+ "permission": MultipleAdvisorPermissionResponseAdvisorsPermissionsInnerResponsePermission.from_dict(obj["permission"]) if obj.get("permission") is not None else None
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/multiple_advisor_permission_response_advisors_permissions_inner_response_permission.py b/symphony/bdk/gen/federation_model/multiple_advisor_permission_response_advisors_permissions_inner_response_permission.py
new file mode 100644
index 00000000..b2e0e6ac
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/multiple_advisor_permission_response_advisors_permissions_inner_response_permission.py
@@ -0,0 +1,87 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, Field, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class MultipleAdvisorPermissionResponseAdvisorsPermissionsInnerResponsePermission(BaseModel):
+ """
+ MultipleAdvisorPermissionResponseAdvisorsPermissionsInnerResponsePermission
+ """ # noqa: E501
+ permission_name: Optional[StrictStr] = Field(default=None, alias="permissionName")
+ __properties: ClassVar[List[str]] = ["permissionName"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of MultipleAdvisorPermissionResponseAdvisorsPermissionsInnerResponsePermission from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of MultipleAdvisorPermissionResponseAdvisorsPermissionsInnerResponsePermission from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "permissionName": obj.get("permissionName")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/multiple_destination_federation_group.py b/symphony/bdk/gen/federation_model/multiple_destination_federation_group.py
new file mode 100644
index 00000000..36403973
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/multiple_destination_federation_group.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class MultipleDestinationFederationGroup(BaseModel):
+ """
+ MultipleDestinationFederationGroup
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of MultipleDestinationFederationGroup from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of MultipleDestinationFederationGroup from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/no_available_number.py b/symphony/bdk/gen/federation_model/no_available_number.py
new file mode 100644
index 00000000..108ae749
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/no_available_number.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class NoAvailableNumber(BaseModel):
+ """
+ No available number.
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of NoAvailableNumber from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of NoAvailableNumber from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/no_field_updated.py b/symphony/bdk/gen/federation_model/no_field_updated.py
new file mode 100644
index 00000000..c67249e7
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/no_field_updated.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class NoFieldUpdated(BaseModel):
+ """
+ No field updated
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of NoFieldUpdated from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of NoFieldUpdated from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/no_numbers_found.py b/symphony/bdk/gen/federation_model/no_numbers_found.py
new file mode 100644
index 00000000..32c3debb
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/no_numbers_found.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class NoNumbersFound(BaseModel):
+ """
+ No numbers found
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of NoNumbersFound from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of NoNumbersFound from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/not_a_room_member.py b/symphony/bdk/gen/federation_model/not_a_room_member.py
new file mode 100644
index 00000000..c9be5e2a
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/not_a_room_member.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class NotARoomMember(BaseModel):
+ """
+ Not a room member.
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of NotARoomMember from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of NotARoomMember from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/not_applicable_for_external_network.py b/symphony/bdk/gen/federation_model/not_applicable_for_external_network.py
new file mode 100644
index 00000000..a365c521
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/not_applicable_for_external_network.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class NotApplicableForExternalNetwork(BaseModel):
+ """
+ Not Applicable for the given external network.
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of NotApplicableForExternalNetwork from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of NotApplicableForExternalNetwork from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/not_entitled_on_direct_emp.py b/symphony/bdk/gen/federation_model/not_entitled_on_direct_emp.py
new file mode 100644
index 00000000..18b7e43d
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/not_entitled_on_direct_emp.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class NotEntitledOnDirectEmp(BaseModel):
+ """
+ Not Entitled on direct emp.
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of NotEntitledOnDirectEmp from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of NotEntitledOnDirectEmp from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/number_not_available.py b/symphony/bdk/gen/federation_model/number_not_available.py
new file mode 100644
index 00000000..87e5ef6e
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/number_not_available.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class NumberNotAvailable(BaseModel):
+ """
+ Number not available
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of NumberNotAvailable from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of NumberNotAvailable from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/number_not_found.py b/symphony/bdk/gen/federation_model/number_not_found.py
new file mode 100644
index 00000000..9decf67d
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/number_not_found.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class NumberNotFound(BaseModel):
+ """
+ Number not found
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of NumberNotFound from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of NumberNotFound from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/number_registration_not_possible.py b/symphony/bdk/gen/federation_model/number_registration_not_possible.py
new file mode 100644
index 00000000..b58b4ffc
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/number_registration_not_possible.py
@@ -0,0 +1,93 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class NumberRegistrationNotPossible(BaseModel):
+ """
+ Number registration is not possible
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ detail_message: Optional[StrictStr] = Field(default=None, alias="detailMessage")
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "detailMessage", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of NumberRegistrationNotPossible from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of NumberRegistrationNotPossible from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "detailMessage": obj.get("detailMessage"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/number_response.py b/symphony/bdk/gen/federation_model/number_response.py
new file mode 100644
index 00000000..5753d60b
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/number_response.py
@@ -0,0 +1,109 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, Field, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from symphony.bdk.gen.federation_model.address_response import AddressResponse
+from symphony.bdk.gen.federation_model.assigned_to import AssignedTo
+from typing import Optional, Set
+from typing_extensions import Self
+
+class NumberResponse(BaseModel):
+ """
+ NumberResponse
+ """ # noqa: E501
+ phone_number: StrictStr = Field(alias="phoneNumber")
+ sub_network: Optional[StrictStr] = Field(default=None, alias="subNetwork")
+ country: Optional[StrictStr] = None
+ carrier: Optional[StrictStr] = None
+ provider: Optional[StrictStr] = None
+ status: Optional[StrictStr] = None
+ address: Optional[AddressResponse] = None
+ assigned_to: Optional[AssignedTo] = Field(default=None, alias="assignedTo")
+ __properties: ClassVar[List[str]] = ["phoneNumber", "subNetwork", "country", "carrier", "provider", "status", "address", "assignedTo"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of NumberResponse from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ # override the default output from pydantic by calling `to_dict()` of address
+ if self.address:
+ _dict['address'] = self.address.to_dict()
+ # override the default output from pydantic by calling `to_dict()` of assigned_to
+ if self.assigned_to:
+ _dict['assignedTo'] = self.assigned_to.to_dict()
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of NumberResponse from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "phoneNumber": obj.get("phoneNumber"),
+ "subNetwork": obj.get("subNetwork"),
+ "country": obj.get("country"),
+ "carrier": obj.get("carrier"),
+ "provider": obj.get("provider"),
+ "status": obj.get("status"),
+ "address": AddressResponse.from_dict(obj["address"]) if obj.get("address") is not None else None,
+ "assignedTo": AssignedTo.from_dict(obj["assignedTo"]) if obj.get("assignedTo") is not None else None
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/pagination.py b/symphony/bdk/gen/federation_model/pagination.py
new file mode 100644
index 00000000..669c3284
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/pagination.py
@@ -0,0 +1,95 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from symphony.bdk.gen.federation_model.cursors import Cursors
+from typing import Optional, Set
+from typing_extensions import Self
+
+class Pagination(BaseModel):
+ """
+ Pagination
+ """ # noqa: E501
+ previous: Optional[StrictStr] = None
+ next: Optional[StrictStr] = None
+ cursors: Optional[Cursors] = None
+ __properties: ClassVar[List[str]] = ["previous", "next", "cursors"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of Pagination from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ # override the default output from pydantic by calling `to_dict()` of cursors
+ if self.cursors:
+ _dict['cursors'] = self.cursors.to_dict()
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of Pagination from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "previous": obj.get("previous"),
+ "next": obj.get("next"),
+ "cursors": Cursors.from_dict(obj["cursors"]) if obj.get("cursors") is not None else None
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/permission_already_assigned.py b/symphony/bdk/gen/federation_model/permission_already_assigned.py
new file mode 100644
index 00000000..2d43fc3b
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/permission_already_assigned.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class PermissionAlreadyAssigned(BaseModel):
+ """
+ Permission already assigned.
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of PermissionAlreadyAssigned from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of PermissionAlreadyAssigned from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/permission_not_found.py b/symphony/bdk/gen/federation_model/permission_not_found.py
new file mode 100644
index 00000000..7a6ad5ce
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/permission_not_found.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class PermissionNotFound(BaseModel):
+ """
+ Permission not found.
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of PermissionNotFound from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of PermissionNotFound from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/permission_response.py b/symphony/bdk/gen/federation_model/permission_response.py
new file mode 100644
index 00000000..53425158
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/permission_response.py
@@ -0,0 +1,89 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, Field, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class PermissionResponse(BaseModel):
+ """
+ PermissionResponse
+ """ # noqa: E501
+ permission_name: Optional[StrictStr] = Field(default=None, alias="permissionName")
+ permission_id: Optional[StrictStr] = Field(default=None, alias="permissionId")
+ __properties: ClassVar[List[str]] = ["permissionName", "permissionId"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of PermissionResponse from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of PermissionResponse from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "permissionName": obj.get("permissionName"),
+ "permissionId": obj.get("permissionId")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/permissions_response.py b/symphony/bdk/gen/federation_model/permissions_response.py
new file mode 100644
index 00000000..691797a1
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/permissions_response.py
@@ -0,0 +1,87 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class PermissionsResponse(BaseModel):
+ """
+ PermissionsResponse
+ """ # noqa: E501
+ permissions: Optional[List[StrictStr]] = None
+ __properties: ClassVar[List[str]] = ["permissions"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of PermissionsResponse from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of PermissionsResponse from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "permissions": obj.get("permissions")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/phone.py b/symphony/bdk/gen/federation_model/phone.py
new file mode 100644
index 00000000..bb5e3345
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/phone.py
@@ -0,0 +1,103 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, Field, StrictStr, field_validator
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class Phone(BaseModel):
+ """
+ Phone number (direct EMP case)
+ """ # noqa: E501
+ number: Optional[StrictStr] = None
+ product: Optional[StrictStr] = None
+ sub_network: Optional[StrictStr] = Field(default=None, description="Sub-network: IN-NETWORK or SECOND-NUMBER", alias="subNetwork")
+ provider: Optional[StrictStr] = None
+ __properties: ClassVar[List[str]] = ["number", "product", "subNetwork", "provider"]
+
+ @field_validator('provider')
+ def provider_validate_enum(cls, value):
+ """Validates the enum"""
+ if value is None:
+ return value
+
+ if value not in set(['UMONY', 'CUSTOMER_SUPPLIED']):
+ raise ValueError("must be one of enum values ('UMONY', 'CUSTOMER_SUPPLIED')")
+ return value
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of Phone from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of Phone from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "number": obj.get("number"),
+ "product": obj.get("product"),
+ "subNetwork": obj.get("subNetwork"),
+ "provider": obj.get("provider")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/phone_international_onboarding_forbidden.py b/symphony/bdk/gen/federation_model/phone_international_onboarding_forbidden.py
new file mode 100644
index 00000000..22b15cba
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/phone_international_onboarding_forbidden.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class PhoneInternationalOnboardingForbidden(BaseModel):
+ """
+ Forbidden international onboarding.
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of PhoneInternationalOnboardingForbidden from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of PhoneInternationalOnboardingForbidden from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/phone_number_already_allocated_problem.py b/symphony/bdk/gen/federation_model/phone_number_already_allocated_problem.py
new file mode 100644
index 00000000..17cf4f73
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/phone_number_already_allocated_problem.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class PhoneNumberAlreadyAllocatedProblem(BaseModel):
+ """
+ The phone number is already allocated.
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of PhoneNumberAlreadyAllocatedProblem from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of PhoneNumberAlreadyAllocatedProblem from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/phone_number_info.py b/symphony/bdk/gen/federation_model/phone_number_info.py
new file mode 100644
index 00000000..6e7f6d63
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/phone_number_info.py
@@ -0,0 +1,127 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr, field_validator
+from typing import Any, ClassVar, Dict, List, Optional
+from symphony.bdk.gen.federation_model.assigned_to import AssignedTo
+from symphony.bdk.gen.federation_model.external_network import ExternalNetwork
+from typing import Optional, Set
+from typing_extensions import Self
+
+class PhoneNumberInfo(BaseModel):
+ """
+ PhoneNumberInfo
+ """ # noqa: E501
+ phone_number: Optional[StrictStr] = Field(default=None, alias="phoneNumber")
+ sub_network: Optional[StrictStr] = Field(default=None, description="sub network of the phone, either: - SECOND-NUMBER - IN-NETWORK ", alias="subNetwork")
+ country: Optional[StrictStr] = None
+ carrier: Optional[StrictStr] = None
+ status: Optional[StrictStr] = Field(default=None, description="Phone number status - USED - FREE - RELEASED - ON_HOLD ")
+ product_code: Optional[StrictInt] = Field(default=None, alias="productCode")
+ product: Optional[StrictStr] = Field(default=None, description="For fully ported or partially ported numbers - PRE_ALLOCATED_NUMBER - PRE_ALLOCATED_FULL - SECOND_NUMBER - SECOND_NUMBER_FULL - VOICE (For In-Network numbers only) - SMS (For In-Network numbers only) ")
+ provider: Optional[StrictStr] = None
+ assigned_to: Optional[AssignedTo] = Field(default=None, alias="assignedTo")
+ external_networks: Optional[List[ExternalNetwork]] = Field(default=None, alias="externalNetworks")
+ __properties: ClassVar[List[str]] = ["phoneNumber", "subNetwork", "country", "carrier", "status", "productCode", "product", "provider", "assignedTo", "externalNetworks"]
+
+ @field_validator('provider')
+ def provider_validate_enum(cls, value):
+ """Validates the enum"""
+ if value is None:
+ return value
+
+ if value not in set(['UMONY', 'CUSTOMER_SUPPLIED']):
+ raise ValueError("must be one of enum values ('UMONY', 'CUSTOMER_SUPPLIED')")
+ return value
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of PhoneNumberInfo from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ # override the default output from pydantic by calling `to_dict()` of assigned_to
+ if self.assigned_to:
+ _dict['assignedTo'] = self.assigned_to.to_dict()
+ # override the default output from pydantic by calling `to_dict()` of each item in external_networks (list)
+ _items = []
+ if self.external_networks:
+ for _item_external_networks in self.external_networks:
+ if _item_external_networks:
+ _items.append(_item_external_networks.to_dict())
+ _dict['externalNetworks'] = _items
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of PhoneNumberInfo from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "phoneNumber": obj.get("phoneNumber"),
+ "subNetwork": obj.get("subNetwork"),
+ "country": obj.get("country"),
+ "carrier": obj.get("carrier"),
+ "status": obj.get("status"),
+ "productCode": obj.get("productCode"),
+ "product": obj.get("product"),
+ "provider": obj.get("provider"),
+ "assignedTo": AssignedTo.from_dict(obj["assignedTo"]) if obj.get("assignedTo") is not None else None,
+ "externalNetworks": [ExternalNetwork.from_dict(_item) for _item in obj["externalNetworks"]] if obj.get("externalNetworks") is not None else None
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/phone_number_not_assigned.py b/symphony/bdk/gen/federation_model/phone_number_not_assigned.py
new file mode 100644
index 00000000..c0a657df
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/phone_number_not_assigned.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class PhoneNumberNotAssigned(BaseModel):
+ """
+ The specified advisor does not have a phone number assigned
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of PhoneNumberNotAssigned from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of PhoneNumberNotAssigned from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/phone_number_not_found.py b/symphony/bdk/gen/federation_model/phone_number_not_found.py
new file mode 100644
index 00000000..9790bb9a
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/phone_number_not_found.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class PhoneNumberNotFound(BaseModel):
+ """
+ Phone number not found
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of PhoneNumberNotFound from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of PhoneNumberNotFound from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/phone_number_pre_allocation_not_supported_problem.py b/symphony/bdk/gen/federation_model/phone_number_pre_allocation_not_supported_problem.py
new file mode 100644
index 00000000..13c29a51
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/phone_number_pre_allocation_not_supported_problem.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class PhoneNumberPreAllocationNotSupportedProblem(BaseModel):
+ """
+ Phone number pre-allocation is not supported for this external network.
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of PhoneNumberPreAllocationNotSupportedProblem from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of PhoneNumberPreAllocationNotSupportedProblem from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/phone_numbers_details_response.py b/symphony/bdk/gen/federation_model/phone_numbers_details_response.py
new file mode 100644
index 00000000..cf7f53f8
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/phone_numbers_details_response.py
@@ -0,0 +1,95 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict
+from typing import Any, ClassVar, Dict, List, Optional
+from symphony.bdk.gen.federation_model.phone_number_info import PhoneNumberInfo
+from typing import Optional, Set
+from typing_extensions import Self
+
+class PhoneNumbersDetailsResponse(BaseModel):
+ """
+ PhoneNumbersDetailsResponse
+ """ # noqa: E501
+ numbers: Optional[List[PhoneNumberInfo]] = None
+ __properties: ClassVar[List[str]] = ["numbers"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of PhoneNumbersDetailsResponse from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ # override the default output from pydantic by calling `to_dict()` of each item in numbers (list)
+ _items = []
+ if self.numbers:
+ for _item_numbers in self.numbers:
+ if _item_numbers:
+ _items.append(_item_numbers.to_dict())
+ _dict['numbers'] = _items
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of PhoneNumbersDetailsResponse from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "numbers": [PhoneNumberInfo.from_dict(_item) for _item in obj["numbers"]] if obj.get("numbers") is not None else None
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/pre_entitlement_failed.py b/symphony/bdk/gen/federation_model/pre_entitlement_failed.py
new file mode 100644
index 00000000..069cf1a0
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/pre_entitlement_failed.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class PreEntitlementFailed(BaseModel):
+ """
+ Pre-entitlement failed.
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of PreEntitlementFailed from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of PreEntitlementFailed from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/pre_entitlement_not_found.py b/symphony/bdk/gen/federation_model/pre_entitlement_not_found.py
new file mode 100644
index 00000000..084f3c63
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/pre_entitlement_not_found.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class PreEntitlementNotFound(BaseModel):
+ """
+ Pre-entitlement not found
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of PreEntitlementNotFound from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of PreEntitlementNotFound from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/pre_entitlement_permissions_not_supported_problem.py b/symphony/bdk/gen/federation_model/pre_entitlement_permissions_not_supported_problem.py
new file mode 100644
index 00000000..ede5687f
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/pre_entitlement_permissions_not_supported_problem.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class PreEntitlementPermissionsNotSupportedProblem(BaseModel):
+ """
+ PreEntitlementPermissionsNotSupportedProblem
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of PreEntitlementPermissionsNotSupportedProblem from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of PreEntitlementPermissionsNotSupportedProblem from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/pre_entitlement_phone_number_mismatch.py b/symphony/bdk/gen/federation_model/pre_entitlement_phone_number_mismatch.py
new file mode 100644
index 00000000..16a9669f
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/pre_entitlement_phone_number_mismatch.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class PreEntitlementPhoneNumberMismatch(BaseModel):
+ """
+ The phone number of the pre-entitlement does not match.
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of PreEntitlementPhoneNumberMismatch from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of PreEntitlementPhoneNumberMismatch from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/pre_entitlement_request.py b/symphony/bdk/gen/federation_model/pre_entitlement_request.py
new file mode 100644
index 00000000..98e69882
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/pre_entitlement_request.py
@@ -0,0 +1,89 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, Field, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class PreEntitlementRequest(BaseModel):
+ """
+ PreEntitlementRequest
+ """ # noqa: E501
+ advisor_phone_number: StrictStr = Field(alias="advisorPhoneNumber")
+ federation_group_id: Optional[StrictStr] = Field(default=None, alias="federationGroupId")
+ __properties: ClassVar[List[str]] = ["advisorPhoneNumber", "federationGroupId"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of PreEntitlementRequest from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of PreEntitlementRequest from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "advisorPhoneNumber": obj.get("advisorPhoneNumber"),
+ "federationGroupId": obj.get("federationGroupId")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/preferred_language_not_supported.py b/symphony/bdk/gen/federation_model/preferred_language_not_supported.py
new file mode 100644
index 00000000..88ac00a0
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/preferred_language_not_supported.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class PreferredLanguageNotSupported(BaseModel):
+ """
+ Preferred language not supported.
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of PreferredLanguageNotSupported from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of PreferredLanguageNotSupported from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/reactivate_room_not_implemented.py b/symphony/bdk/gen/federation_model/reactivate_room_not_implemented.py
new file mode 100644
index 00000000..b41e1b58
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/reactivate_room_not_implemented.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class ReactivateRoomNotImplemented(BaseModel):
+ """
+ Reactivate Room Not Implemented
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of ReactivateRoomNotImplemented from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of ReactivateRoomNotImplemented from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/remove_pre_entitlement404_response.py b/symphony/bdk/gen/federation_model/remove_pre_entitlement404_response.py
new file mode 100644
index 00000000..dc6a2b58
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/remove_pre_entitlement404_response.py
@@ -0,0 +1,137 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import json
+import pprint
+from pydantic import BaseModel, ConfigDict, Field, StrictStr, ValidationError, field_validator
+from typing import Any, List, Optional
+from symphony.bdk.gen.federation_model.pre_entitlement_not_found import PreEntitlementNotFound
+from symphony.bdk.gen.federation_model.tenant_configuration_not_found import TenantConfigurationNotFound
+from pydantic import StrictStr, Field
+from typing import Union, List, Set, Optional, Dict
+from typing_extensions import Literal, Self
+
+REMOVEPREENTITLEMENT404RESPONSE_ONE_OF_SCHEMAS = ["PreEntitlementNotFound", "TenantConfigurationNotFound"]
+
+class RemovePreEntitlement404Response(BaseModel):
+ """
+ RemovePreEntitlement404Response
+ """
+ # data type: TenantConfigurationNotFound
+ oneof_schema_1_validator: Optional[TenantConfigurationNotFound] = None
+ # data type: PreEntitlementNotFound
+ oneof_schema_2_validator: Optional[PreEntitlementNotFound] = None
+ actual_instance: Optional[Union[PreEntitlementNotFound, TenantConfigurationNotFound]] = None
+ one_of_schemas: Set[str] = { "PreEntitlementNotFound", "TenantConfigurationNotFound" }
+
+ model_config = ConfigDict(
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def __init__(self, *args, **kwargs) -> None:
+ if args:
+ if len(args) > 1:
+ raise ValueError("If a position argument is used, only 1 is allowed to set `actual_instance`")
+ if kwargs:
+ raise ValueError("If a position argument is used, keyword arguments cannot be used.")
+ super().__init__(actual_instance=args[0])
+ else:
+ super().__init__(**kwargs)
+
+ @field_validator('actual_instance')
+ def actual_instance_must_validate_oneof(cls, v):
+ instance = RemovePreEntitlement404Response.model_construct()
+ error_messages = []
+ match = 0
+ # validate data type: TenantConfigurationNotFound
+ if not isinstance(v, TenantConfigurationNotFound):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `TenantConfigurationNotFound`")
+ else:
+ match += 1
+ # validate data type: PreEntitlementNotFound
+ if not isinstance(v, PreEntitlementNotFound):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `PreEntitlementNotFound`")
+ else:
+ match += 1
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when setting `actual_instance` in RemovePreEntitlement404Response with oneOf schemas: PreEntitlementNotFound, TenantConfigurationNotFound. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when setting `actual_instance` in RemovePreEntitlement404Response with oneOf schemas: PreEntitlementNotFound, TenantConfigurationNotFound. Details: " + ", ".join(error_messages))
+ else:
+ return v
+
+ @classmethod
+ def from_dict(cls, obj: Union[str, Dict[str, Any]]) -> Self:
+ return cls.from_json(json.dumps(obj))
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Self:
+ """Returns the object represented by the json string"""
+ instance = cls.model_construct()
+ error_messages = []
+ match = 0
+
+ # deserialize data into TenantConfigurationNotFound
+ try:
+ instance.actual_instance = TenantConfigurationNotFound.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+ # deserialize data into PreEntitlementNotFound
+ try:
+ instance.actual_instance = PreEntitlementNotFound.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when deserializing the JSON string into RemovePreEntitlement404Response with oneOf schemas: PreEntitlementNotFound, TenantConfigurationNotFound. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when deserializing the JSON string into RemovePreEntitlement404Response with oneOf schemas: PreEntitlementNotFound, TenantConfigurationNotFound. Details: " + ", ".join(error_messages))
+ else:
+ return instance
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the actual instance"""
+ if self.actual_instance is None:
+ return "null"
+
+ if hasattr(self.actual_instance, "to_json") and callable(self.actual_instance.to_json):
+ return self.actual_instance.to_json()
+ else:
+ return json.dumps(self.actual_instance)
+
+ def to_dict(self) -> Optional[Union[Dict[str, Any], PreEntitlementNotFound, TenantConfigurationNotFound]]:
+ """Returns the dict representation of the actual instance"""
+ if self.actual_instance is None:
+ return None
+
+ if hasattr(self.actual_instance, "to_dict") and callable(self.actual_instance.to_dict):
+ return self.actual_instance.to_dict()
+ else:
+ # primitive type
+ return self.actual_instance
+
+ def to_str(self) -> str:
+ """Returns the string representation of the actual instance"""
+ return pprint.pformat(self.model_dump())
+
+
diff --git a/symphony/bdk/gen/federation_model/remove_room_member_forbidden.py b/symphony/bdk/gen/federation_model/remove_room_member_forbidden.py
new file mode 100644
index 00000000..7dc1d860
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/remove_room_member_forbidden.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class RemoveRoomMemberForbidden(BaseModel):
+ """
+ Remove room member forbidden
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of RemoveRoomMemberForbidden from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of RemoveRoomMemberForbidden from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/remove_room_members_response.py b/symphony/bdk/gen/federation_model/remove_room_members_response.py
new file mode 100644
index 00000000..4b07def9
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/remove_room_members_response.py
@@ -0,0 +1,87 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, Field, StrictBool
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class RemoveRoomMembersResponse(BaseModel):
+ """
+ RemoveRoomMembersResponse
+ """ # noqa: E501
+ is_room_deleted: Optional[StrictBool] = Field(default=None, alias="isRoomDeleted")
+ __properties: ClassVar[List[str]] = ["isRoomDeleted"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of RemoveRoomMembersResponse from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of RemoveRoomMembersResponse from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "isRoomDeleted": obj.get("isRoomDeleted")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/remove_room_memberv2403_response.py b/symphony/bdk/gen/federation_model/remove_room_memberv2403_response.py
new file mode 100644
index 00000000..354c8e59
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/remove_room_memberv2403_response.py
@@ -0,0 +1,137 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import json
+import pprint
+from pydantic import BaseModel, ConfigDict, Field, StrictStr, ValidationError, field_validator
+from typing import Any, List, Optional
+from symphony.bdk.gen.federation_model.forbidden import Forbidden
+from symphony.bdk.gen.federation_model.inline_response4033 import InlineResponse4033
+from pydantic import StrictStr, Field
+from typing import Union, List, Set, Optional, Dict
+from typing_extensions import Literal, Self
+
+REMOVEROOMMEMBERV2403RESPONSE_ONE_OF_SCHEMAS = ["Forbidden", "InlineResponse4033"]
+
+class RemoveRoomMemberv2403Response(BaseModel):
+ """
+ RemoveRoomMemberv2403Response
+ """
+ # data type: InlineResponse4033
+ oneof_schema_1_validator: Optional[InlineResponse4033] = None
+ # data type: Forbidden
+ oneof_schema_2_validator: Optional[Forbidden] = None
+ actual_instance: Optional[Union[Forbidden, InlineResponse4033]] = None
+ one_of_schemas: Set[str] = { "Forbidden", "InlineResponse4033" }
+
+ model_config = ConfigDict(
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def __init__(self, *args, **kwargs) -> None:
+ if args:
+ if len(args) > 1:
+ raise ValueError("If a position argument is used, only 1 is allowed to set `actual_instance`")
+ if kwargs:
+ raise ValueError("If a position argument is used, keyword arguments cannot be used.")
+ super().__init__(actual_instance=args[0])
+ else:
+ super().__init__(**kwargs)
+
+ @field_validator('actual_instance')
+ def actual_instance_must_validate_oneof(cls, v):
+ instance = RemoveRoomMemberv2403Response.model_construct()
+ error_messages = []
+ match = 0
+ # validate data type: InlineResponse4033
+ if not isinstance(v, InlineResponse4033):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `InlineResponse4033`")
+ else:
+ match += 1
+ # validate data type: Forbidden
+ if not isinstance(v, Forbidden):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `Forbidden`")
+ else:
+ match += 1
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when setting `actual_instance` in RemoveRoomMemberv2403Response with oneOf schemas: Forbidden, InlineResponse4033. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when setting `actual_instance` in RemoveRoomMemberv2403Response with oneOf schemas: Forbidden, InlineResponse4033. Details: " + ", ".join(error_messages))
+ else:
+ return v
+
+ @classmethod
+ def from_dict(cls, obj: Union[str, Dict[str, Any]]) -> Self:
+ return cls.from_json(json.dumps(obj))
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Self:
+ """Returns the object represented by the json string"""
+ instance = cls.model_construct()
+ error_messages = []
+ match = 0
+
+ # deserialize data into InlineResponse4033
+ try:
+ instance.actual_instance = InlineResponse4033.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+ # deserialize data into Forbidden
+ try:
+ instance.actual_instance = Forbidden.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when deserializing the JSON string into RemoveRoomMemberv2403Response with oneOf schemas: Forbidden, InlineResponse4033. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when deserializing the JSON string into RemoveRoomMemberv2403Response with oneOf schemas: Forbidden, InlineResponse4033. Details: " + ", ".join(error_messages))
+ else:
+ return instance
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the actual instance"""
+ if self.actual_instance is None:
+ return "null"
+
+ if hasattr(self.actual_instance, "to_json") and callable(self.actual_instance.to_json):
+ return self.actual_instance.to_json()
+ else:
+ return json.dumps(self.actual_instance)
+
+ def to_dict(self) -> Optional[Union[Dict[str, Any], Forbidden, InlineResponse4033]]:
+ """Returns the dict representation of the actual instance"""
+ if self.actual_instance is None:
+ return None
+
+ if hasattr(self.actual_instance, "to_dict") and callable(self.actual_instance.to_dict):
+ return self.actual_instance.to_dict()
+ else:
+ # primitive type
+ return self.actual_instance
+
+ def to_str(self) -> str:
+ """Returns the string representation of the actual instance"""
+ return pprint.pformat(self.model_dump())
+
+
diff --git a/symphony/bdk/gen/federation_model/rename_room409_response.py b/symphony/bdk/gen/federation_model/rename_room409_response.py
new file mode 100644
index 00000000..43f348cb
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/rename_room409_response.py
@@ -0,0 +1,165 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import json
+import pprint
+from pydantic import BaseModel, ConfigDict, Field, StrictStr, ValidationError, field_validator
+from typing import Any, List, Optional
+from symphony.bdk.gen.federation_model.cannot_rename_room_duplicate_room_name import CannotRenameRoomDuplicateRoomName
+from symphony.bdk.gen.federation_model.different_room_name_required import DifferentRoomNameRequired
+from symphony.bdk.gen.federation_model.room_already_exists import RoomAlreadyExists
+from symphony.bdk.gen.federation_model.room_is_deactivated import RoomIsDeactivated
+from pydantic import StrictStr, Field
+from typing import Union, List, Set, Optional, Dict
+from typing_extensions import Literal, Self
+
+RENAMEROOM409RESPONSE_ONE_OF_SCHEMAS = ["CannotRenameRoomDuplicateRoomName", "DifferentRoomNameRequired", "RoomAlreadyExists", "RoomIsDeactivated"]
+
+class RenameRoom409Response(BaseModel):
+ """
+ RenameRoom409Response
+ """
+ # data type: RoomAlreadyExists
+ oneof_schema_1_validator: Optional[RoomAlreadyExists] = None
+ # data type: DifferentRoomNameRequired
+ oneof_schema_2_validator: Optional[DifferentRoomNameRequired] = None
+ # data type: CannotRenameRoomDuplicateRoomName
+ oneof_schema_3_validator: Optional[CannotRenameRoomDuplicateRoomName] = None
+ # data type: RoomIsDeactivated
+ oneof_schema_4_validator: Optional[RoomIsDeactivated] = None
+ actual_instance: Optional[Union[CannotRenameRoomDuplicateRoomName, DifferentRoomNameRequired, RoomAlreadyExists, RoomIsDeactivated]] = None
+ one_of_schemas: Set[str] = { "CannotRenameRoomDuplicateRoomName", "DifferentRoomNameRequired", "RoomAlreadyExists", "RoomIsDeactivated" }
+
+ model_config = ConfigDict(
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def __init__(self, *args, **kwargs) -> None:
+ if args:
+ if len(args) > 1:
+ raise ValueError("If a position argument is used, only 1 is allowed to set `actual_instance`")
+ if kwargs:
+ raise ValueError("If a position argument is used, keyword arguments cannot be used.")
+ super().__init__(actual_instance=args[0])
+ else:
+ super().__init__(**kwargs)
+
+ @field_validator('actual_instance')
+ def actual_instance_must_validate_oneof(cls, v):
+ instance = RenameRoom409Response.model_construct()
+ error_messages = []
+ match = 0
+ # validate data type: RoomAlreadyExists
+ if not isinstance(v, RoomAlreadyExists):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `RoomAlreadyExists`")
+ else:
+ match += 1
+ # validate data type: DifferentRoomNameRequired
+ if not isinstance(v, DifferentRoomNameRequired):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `DifferentRoomNameRequired`")
+ else:
+ match += 1
+ # validate data type: CannotRenameRoomDuplicateRoomName
+ if not isinstance(v, CannotRenameRoomDuplicateRoomName):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `CannotRenameRoomDuplicateRoomName`")
+ else:
+ match += 1
+ # validate data type: RoomIsDeactivated
+ if not isinstance(v, RoomIsDeactivated):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `RoomIsDeactivated`")
+ else:
+ match += 1
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when setting `actual_instance` in RenameRoom409Response with oneOf schemas: CannotRenameRoomDuplicateRoomName, DifferentRoomNameRequired, RoomAlreadyExists, RoomIsDeactivated. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when setting `actual_instance` in RenameRoom409Response with oneOf schemas: CannotRenameRoomDuplicateRoomName, DifferentRoomNameRequired, RoomAlreadyExists, RoomIsDeactivated. Details: " + ", ".join(error_messages))
+ else:
+ return v
+
+ @classmethod
+ def from_dict(cls, obj: Union[str, Dict[str, Any]]) -> Self:
+ return cls.from_json(json.dumps(obj))
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Self:
+ """Returns the object represented by the json string"""
+ instance = cls.model_construct()
+ error_messages = []
+ match = 0
+
+ # deserialize data into RoomAlreadyExists
+ try:
+ instance.actual_instance = RoomAlreadyExists.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+ # deserialize data into DifferentRoomNameRequired
+ try:
+ instance.actual_instance = DifferentRoomNameRequired.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+ # deserialize data into CannotRenameRoomDuplicateRoomName
+ try:
+ instance.actual_instance = CannotRenameRoomDuplicateRoomName.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+ # deserialize data into RoomIsDeactivated
+ try:
+ instance.actual_instance = RoomIsDeactivated.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when deserializing the JSON string into RenameRoom409Response with oneOf schemas: CannotRenameRoomDuplicateRoomName, DifferentRoomNameRequired, RoomAlreadyExists, RoomIsDeactivated. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when deserializing the JSON string into RenameRoom409Response with oneOf schemas: CannotRenameRoomDuplicateRoomName, DifferentRoomNameRequired, RoomAlreadyExists, RoomIsDeactivated. Details: " + ", ".join(error_messages))
+ else:
+ return instance
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the actual instance"""
+ if self.actual_instance is None:
+ return "null"
+
+ if hasattr(self.actual_instance, "to_json") and callable(self.actual_instance.to_json):
+ return self.actual_instance.to_json()
+ else:
+ return json.dumps(self.actual_instance)
+
+ def to_dict(self) -> Optional[Union[Dict[str, Any], CannotRenameRoomDuplicateRoomName, DifferentRoomNameRequired, RoomAlreadyExists, RoomIsDeactivated]]:
+ """Returns the dict representation of the actual instance"""
+ if self.actual_instance is None:
+ return None
+
+ if hasattr(self.actual_instance, "to_dict") and callable(self.actual_instance.to_dict):
+ return self.actual_instance.to_dict()
+ else:
+ # primitive type
+ return self.actual_instance
+
+ def to_str(self) -> str:
+ """Returns the string representation of the actual instance"""
+ return pprint.pformat(self.model_dump())
+
+
diff --git a/symphony/bdk/gen/federation_model/rename_room_failed.py b/symphony/bdk/gen/federation_model/rename_room_failed.py
new file mode 100644
index 00000000..da6fe27a
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/rename_room_failed.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class RenameRoomFailed(BaseModel):
+ """
+ Failed to rename the room.
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of RenameRoomFailed from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of RenameRoomFailed from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/rename_room_forbidden.py b/symphony/bdk/gen/federation_model/rename_room_forbidden.py
new file mode 100644
index 00000000..ae7b7884
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/rename_room_forbidden.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class RenameRoomForbidden(BaseModel):
+ """
+ Rename room forbidden
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of RenameRoomForbidden from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of RenameRoomForbidden from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/rename_room_request.py b/symphony/bdk/gen/federation_model/rename_room_request.py
new file mode 100644
index 00000000..2a1308e4
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/rename_room_request.py
@@ -0,0 +1,88 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, Field
+from typing import Any, ClassVar, Dict, List
+from typing_extensions import Annotated
+from typing import Optional, Set
+from typing_extensions import Self
+
+class RenameRoomRequest(BaseModel):
+ """
+ RenameRoomRequest
+ """ # noqa: E501
+ new_room_name: Annotated[str, Field(min_length=1, strict=True, max_length=50)] = Field(alias="newRoomName")
+ __properties: ClassVar[List[str]] = ["newRoomName"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of RenameRoomRequest from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of RenameRoomRequest from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "newRoomName": obj.get("newRoomName")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/rename_room_response.py b/symphony/bdk/gen/federation_model/rename_room_response.py
new file mode 100644
index 00000000..57f321bd
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/rename_room_response.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, Field, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class RenameRoomResponse(BaseModel):
+ """
+ RenameRoomResponse
+ """ # noqa: E501
+ stream_id: Optional[StrictStr] = Field(default=None, alias="streamId")
+ old_room_name: Optional[StrictStr] = Field(default=None, alias="oldRoomName")
+ new_room_name: Optional[StrictStr] = Field(default=None, alias="newRoomName")
+ __properties: ClassVar[List[str]] = ["streamId", "oldRoomName", "newRoomName"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of RenameRoomResponse from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of RenameRoomResponse from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "streamId": obj.get("streamId"),
+ "oldRoomName": obj.get("oldRoomName"),
+ "newRoomName": obj.get("newRoomName")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/resend_invite400_response.py b/symphony/bdk/gen/federation_model/resend_invite400_response.py
new file mode 100644
index 00000000..6040784d
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/resend_invite400_response.py
@@ -0,0 +1,137 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import json
+import pprint
+from pydantic import BaseModel, ConfigDict, Field, StrictStr, ValidationError, field_validator
+from typing import Any, List, Optional
+from symphony.bdk.gen.federation_model.invite_already_confirmed import InviteAlreadyConfirmed
+from symphony.bdk.gen.federation_model.invites_not_configured_on_emp import InvitesNotConfiguredOnEmp
+from pydantic import StrictStr, Field
+from typing import Union, List, Set, Optional, Dict
+from typing_extensions import Literal, Self
+
+RESENDINVITE400RESPONSE_ONE_OF_SCHEMAS = ["InviteAlreadyConfirmed", "InvitesNotConfiguredOnEmp"]
+
+class ResendInvite400Response(BaseModel):
+ """
+ ResendInvite400Response
+ """
+ # data type: InviteAlreadyConfirmed
+ oneof_schema_1_validator: Optional[InviteAlreadyConfirmed] = None
+ # data type: InvitesNotConfiguredOnEmp
+ oneof_schema_2_validator: Optional[InvitesNotConfiguredOnEmp] = None
+ actual_instance: Optional[Union[InviteAlreadyConfirmed, InvitesNotConfiguredOnEmp]] = None
+ one_of_schemas: Set[str] = { "InviteAlreadyConfirmed", "InvitesNotConfiguredOnEmp" }
+
+ model_config = ConfigDict(
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def __init__(self, *args, **kwargs) -> None:
+ if args:
+ if len(args) > 1:
+ raise ValueError("If a position argument is used, only 1 is allowed to set `actual_instance`")
+ if kwargs:
+ raise ValueError("If a position argument is used, keyword arguments cannot be used.")
+ super().__init__(actual_instance=args[0])
+ else:
+ super().__init__(**kwargs)
+
+ @field_validator('actual_instance')
+ def actual_instance_must_validate_oneof(cls, v):
+ instance = ResendInvite400Response.model_construct()
+ error_messages = []
+ match = 0
+ # validate data type: InviteAlreadyConfirmed
+ if not isinstance(v, InviteAlreadyConfirmed):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `InviteAlreadyConfirmed`")
+ else:
+ match += 1
+ # validate data type: InvitesNotConfiguredOnEmp
+ if not isinstance(v, InvitesNotConfiguredOnEmp):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `InvitesNotConfiguredOnEmp`")
+ else:
+ match += 1
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when setting `actual_instance` in ResendInvite400Response with oneOf schemas: InviteAlreadyConfirmed, InvitesNotConfiguredOnEmp. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when setting `actual_instance` in ResendInvite400Response with oneOf schemas: InviteAlreadyConfirmed, InvitesNotConfiguredOnEmp. Details: " + ", ".join(error_messages))
+ else:
+ return v
+
+ @classmethod
+ def from_dict(cls, obj: Union[str, Dict[str, Any]]) -> Self:
+ return cls.from_json(json.dumps(obj))
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Self:
+ """Returns the object represented by the json string"""
+ instance = cls.model_construct()
+ error_messages = []
+ match = 0
+
+ # deserialize data into InviteAlreadyConfirmed
+ try:
+ instance.actual_instance = InviteAlreadyConfirmed.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+ # deserialize data into InvitesNotConfiguredOnEmp
+ try:
+ instance.actual_instance = InvitesNotConfiguredOnEmp.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when deserializing the JSON string into ResendInvite400Response with oneOf schemas: InviteAlreadyConfirmed, InvitesNotConfiguredOnEmp. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when deserializing the JSON string into ResendInvite400Response with oneOf schemas: InviteAlreadyConfirmed, InvitesNotConfiguredOnEmp. Details: " + ", ".join(error_messages))
+ else:
+ return instance
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the actual instance"""
+ if self.actual_instance is None:
+ return "null"
+
+ if hasattr(self.actual_instance, "to_json") and callable(self.actual_instance.to_json):
+ return self.actual_instance.to_json()
+ else:
+ return json.dumps(self.actual_instance)
+
+ def to_dict(self) -> Optional[Union[Dict[str, Any], InviteAlreadyConfirmed, InvitesNotConfiguredOnEmp]]:
+ """Returns the dict representation of the actual instance"""
+ if self.actual_instance is None:
+ return None
+
+ if hasattr(self.actual_instance, "to_dict") and callable(self.actual_instance.to_dict):
+ return self.actual_instance.to_dict()
+ else:
+ # primitive type
+ return self.actual_instance
+
+ def to_str(self) -> str:
+ """Returns the string representation of the actual instance"""
+ return pprint.pformat(self.model_dump())
+
+
diff --git a/symphony/bdk/gen/federation_model/resend_invite_failed.py b/symphony/bdk/gen/federation_model/resend_invite_failed.py
new file mode 100644
index 00000000..6743bca9
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/resend_invite_failed.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class ResendInviteFailed(BaseModel):
+ """
+ Invite resend failed.
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of ResendInviteFailed from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of ResendInviteFailed from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/resend_invite_response.py b/symphony/bdk/gen/federation_model/resend_invite_response.py
new file mode 100644
index 00000000..7bbacf7d
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/resend_invite_response.py
@@ -0,0 +1,87 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, Field, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class ResendInviteResponse(BaseModel):
+ """
+ ResendInviteResponse
+ """ # noqa: E501
+ invitation_code: Optional[StrictStr] = Field(default=None, alias="invitationCode")
+ __properties: ClassVar[List[str]] = ["invitationCode"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of ResendInviteResponse from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of ResendInviteResponse from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "invitationCode": obj.get("invitationCode")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/rfc_error.py b/symphony/bdk/gen/federation_model/rfc_error.py
new file mode 100644
index 00000000..49b650c3
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/rfc_error.py
@@ -0,0 +1,96 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, Field, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing_extensions import Annotated
+from typing import Optional, Set
+from typing_extensions import Self
+
+class RfcError(BaseModel):
+ """
+ RfcError
+ """ # noqa: E501
+ type: Optional[StrictStr] = Field(default='about:blank', description="An absolute URI that identifies the problem type. When dereferenced, it SHOULD provide human-readable documentation for the problem type (e.g., using HTML). ")
+ title: Optional[StrictStr] = Field(default=None, description="A short, summary of the problem type. Written in English and readable for engineers (usually not suited for non technical stakeholders and not localized); example: Service Unavailable ")
+ status: Optional[Annotated[int, Field(lt=600, strict=True, ge=100)]] = Field(default=None, description="The HTTP status code generated by the origin server for this occurrence of the problem. ")
+ detail: Optional[StrictStr] = Field(default=None, description="A human readable explanation specific to this occurrence of the problem. ")
+ instance: Optional[StrictStr] = Field(default=None, description="An absolute URI that identifies the specific occurrence of the problem. It may or may not yield further information if dereferenced. ")
+ __properties: ClassVar[List[str]] = ["type", "title", "status", "detail", "instance"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of RfcError from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of RfcError from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type") if obj.get("type") is not None else 'about:blank',
+ "title": obj.get("title"),
+ "status": obj.get("status"),
+ "detail": obj.get("detail"),
+ "instance": obj.get("instance")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/room_already_exists.py b/symphony/bdk/gen/federation_model/room_already_exists.py
new file mode 100644
index 00000000..c39bc440
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/room_already_exists.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class RoomAlreadyExists(BaseModel):
+ """
+ Room already exists.
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of RoomAlreadyExists from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of RoomAlreadyExists from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/room_basic_information.py b/symphony/bdk/gen/federation_model/room_basic_information.py
new file mode 100644
index 00000000..72d6bfda
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/room_basic_information.py
@@ -0,0 +1,93 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class RoomBasicInformation(BaseModel):
+ """
+ RoomBasicInformation
+ """ # noqa: E501
+ stream_id: Optional[StrictStr] = Field(default=None, alias="stream-id")
+ room_name: Optional[StrictStr] = Field(default=None, alias="room-name")
+ emp: Optional[StrictStr] = None
+ created_date: Optional[StrictInt] = Field(default=None, alias="created-date")
+ __properties: ClassVar[List[str]] = ["stream-id", "room-name", "emp", "created-date"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of RoomBasicInformation from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of RoomBasicInformation from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "stream-id": obj.get("stream-id"),
+ "room-name": obj.get("room-name"),
+ "emp": obj.get("emp"),
+ "created-date": obj.get("created-date")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/room_creation_response.py b/symphony/bdk/gen/federation_model/room_creation_response.py
new file mode 100644
index 00000000..9737406c
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/room_creation_response.py
@@ -0,0 +1,112 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from datetime import datetime
+from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr, field_validator
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class RoomCreationResponse(BaseModel):
+ """
+ RoomCreationResponse
+ """ # noqa: E501
+ stream_id: Optional[StrictStr] = Field(default=None, alias="streamId")
+ room_name: Optional[StrictStr] = Field(default=None, alias="roomName")
+ advisor_symphony_id: Optional[StrictStr] = Field(default=None, alias="advisorSymphonyId")
+ federation_group_id: Optional[StrictStr] = Field(default=None, alias="federationGroupId")
+ created: Optional[datetime] = None
+ updated: Optional[datetime] = None
+ room_type: Optional[StrictStr] = Field(default=None, alias="roomType")
+ members_count: Optional[StrictInt] = Field(default=None, alias="membersCount")
+ __properties: ClassVar[List[str]] = ["streamId", "roomName", "advisorSymphonyId", "federationGroupId", "created", "updated", "roomType", "membersCount"]
+
+ @field_validator('room_type')
+ def room_type_validate_enum(cls, value):
+ """Validates the enum"""
+ if value is None:
+ return value
+
+ if value not in set(['ROOM', 'IM']):
+ raise ValueError("must be one of enum values ('ROOM', 'IM')")
+ return value
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of RoomCreationResponse from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of RoomCreationResponse from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "streamId": obj.get("streamId"),
+ "roomName": obj.get("roomName"),
+ "advisorSymphonyId": obj.get("advisorSymphonyId"),
+ "federationGroupId": obj.get("federationGroupId"),
+ "created": obj.get("created"),
+ "updated": obj.get("updated"),
+ "roomType": obj.get("roomType"),
+ "membersCount": obj.get("membersCount")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/room_creation_response_v2.py b/symphony/bdk/gen/federation_model/room_creation_response_v2.py
new file mode 100644
index 00000000..dd460259
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/room_creation_response_v2.py
@@ -0,0 +1,114 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from datetime import datetime
+from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr, field_validator
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class RoomCreationResponseV2(BaseModel):
+ """
+ RoomCreationResponseV2
+ """ # noqa: E501
+ stream_id: Optional[StrictStr] = Field(default=None, alias="streamId")
+ room_name: Optional[StrictStr] = Field(default=None, alias="roomName")
+ advisor_symphony_id: Optional[StrictStr] = Field(default=None, alias="advisorSymphonyId")
+ federation_group_id: Optional[StrictStr] = Field(default=None, alias="federationGroupId")
+ created: Optional[datetime] = None
+ updated: Optional[datetime] = None
+ room_type: Optional[StrictStr] = Field(default=None, alias="roomType")
+ members_count: Optional[StrictInt] = Field(default=None, alias="membersCount")
+ external_network_room_display_name: Optional[StrictStr] = Field(default=None, alias="externalNetworkRoomDisplayName")
+ __properties: ClassVar[List[str]] = ["streamId", "roomName", "advisorSymphonyId", "federationGroupId", "created", "updated", "roomType", "membersCount", "externalNetworkRoomDisplayName"]
+
+ @field_validator('room_type')
+ def room_type_validate_enum(cls, value):
+ """Validates the enum"""
+ if value is None:
+ return value
+
+ if value not in set(['ROOM', 'IM']):
+ raise ValueError("must be one of enum values ('ROOM', 'IM')")
+ return value
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of RoomCreationResponseV2 from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of RoomCreationResponseV2 from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "streamId": obj.get("streamId"),
+ "roomName": obj.get("roomName"),
+ "advisorSymphonyId": obj.get("advisorSymphonyId"),
+ "federationGroupId": obj.get("federationGroupId"),
+ "created": obj.get("created"),
+ "updated": obj.get("updated"),
+ "roomType": obj.get("roomType"),
+ "membersCount": obj.get("membersCount"),
+ "externalNetworkRoomDisplayName": obj.get("externalNetworkRoomDisplayName")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/room_features_request.py b/symphony/bdk/gen/federation_model/room_features_request.py
new file mode 100644
index 00000000..180fb684
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/room_features_request.py
@@ -0,0 +1,87 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, Field, StrictBool
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class RoomFeaturesRequest(BaseModel):
+ """
+ RoomFeaturesRequest
+ """ # noqa: E501
+ attachments_disabled: Optional[StrictBool] = Field(default=None, description="Allows to enable or disable attachments in a room. Only supported for WhatsApp.", alias="attachmentsDisabled")
+ __properties: ClassVar[List[str]] = ["attachmentsDisabled"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of RoomFeaturesRequest from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of RoomFeaturesRequest from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "attachmentsDisabled": obj.get("attachmentsDisabled")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/room_is_deactivated.py b/symphony/bdk/gen/federation_model/room_is_deactivated.py
new file mode 100644
index 00000000..b9260186
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/room_is_deactivated.py
@@ -0,0 +1,98 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class RoomIsDeactivated(BaseModel):
+ """
+ The Room is Deactivated.
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ room_name: Optional[StrictStr] = Field(default=None, alias="roomName")
+ __properties: ClassVar[List[str]] = ["type", "title", "status", "roomName"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of RoomIsDeactivated from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ # set to None if room_name (nullable) is None
+ # and model_fields_set contains the field
+ if self.room_name is None and "room_name" in self.model_fields_set:
+ _dict['roomName'] = None
+
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of RoomIsDeactivated from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status"),
+ "roomName": obj.get("roomName")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/room_member_multi_room_request.py b/symphony/bdk/gen/federation_model/room_member_multi_room_request.py
new file mode 100644
index 00000000..b63653a6
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/room_member_multi_room_request.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictStr
+from typing import Any, ClassVar, Dict, List
+from typing import Optional, Set
+from typing_extensions import Self
+
+class RoomMemberMultiRoomRequest(BaseModel):
+ """
+ RoomMemberMultiRoomRequest
+ """ # noqa: E501
+ stream_id: StrictStr = Field(alias="streamId")
+ member_email_address: StrictStr = Field(alias="memberEmailAddress")
+ contact: StrictBool
+ __properties: ClassVar[List[str]] = ["streamId", "memberEmailAddress", "contact"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of RoomMemberMultiRoomRequest from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of RoomMemberMultiRoomRequest from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "streamId": obj.get("streamId"),
+ "memberEmailAddress": obj.get("memberEmailAddress"),
+ "contact": obj.get("contact")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/room_member_multi_room_requestv2.py b/symphony/bdk/gen/federation_model/room_member_multi_room_requestv2.py
new file mode 100644
index 00000000..93644480
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/room_member_multi_room_requestv2.py
@@ -0,0 +1,92 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from decimal import Decimal
+from pydantic import BaseModel, ConfigDict, Field, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class RoomMemberMultiRoomRequestv2(BaseModel):
+ """
+ RoomMemberMultiRoomRequestv2
+ """ # noqa: E501
+ stream_id: StrictStr = Field(alias="streamId")
+ member_symphony_id: Decimal = Field(alias="memberSymphonyId")
+ emp_channel_connector: Optional[StrictStr] = Field(default=None, alias="empChannelConnector")
+ __properties: ClassVar[List[str]] = ["streamId", "memberSymphonyId", "empChannelConnector"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of RoomMemberMultiRoomRequestv2 from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of RoomMemberMultiRoomRequestv2 from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "streamId": obj.get("streamId"),
+ "memberSymphonyId": obj.get("memberSymphonyId"),
+ "empChannelConnector": obj.get("empChannelConnector")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/room_member_not_found.py b/symphony/bdk/gen/federation_model/room_member_not_found.py
new file mode 100644
index 00000000..16c98ff5
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/room_member_not_found.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class RoomMemberNotFound(BaseModel):
+ """
+ Room member not found
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of RoomMemberNotFound from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of RoomMemberNotFound from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/room_member_request.py b/symphony/bdk/gen/federation_model/room_member_request.py
new file mode 100644
index 00000000..2d4e85c2
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/room_member_request.py
@@ -0,0 +1,95 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictStr
+from typing import Any, ClassVar, Dict, List
+from typing import Optional, Set
+from typing_extensions import Self
+
+class RoomMemberRequest(BaseModel):
+ """
+ RoomMemberRequest
+ """ # noqa: E501
+ stream_id: StrictStr = Field(alias="streamId")
+ member_email_address: StrictStr = Field(alias="memberEmailAddress")
+ advisor_email_address: StrictStr = Field(alias="advisorEmailAddress")
+ external_network: StrictStr = Field(description="External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE", alias="externalNetwork")
+ contact: StrictBool
+ __properties: ClassVar[List[str]] = ["streamId", "memberEmailAddress", "advisorEmailAddress", "externalNetwork", "contact"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of RoomMemberRequest from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of RoomMemberRequest from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "streamId": obj.get("streamId"),
+ "memberEmailAddress": obj.get("memberEmailAddress"),
+ "advisorEmailAddress": obj.get("advisorEmailAddress"),
+ "externalNetwork": obj.get("externalNetwork"),
+ "contact": obj.get("contact")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/room_member_requestv2.py b/symphony/bdk/gen/federation_model/room_member_requestv2.py
new file mode 100644
index 00000000..5fe1738b
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/room_member_requestv2.py
@@ -0,0 +1,96 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from decimal import Decimal
+from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class RoomMemberRequestv2(BaseModel):
+ """
+ RoomMemberRequestv2
+ """ # noqa: E501
+ member_symphony_id: Decimal = Field(alias="memberSymphonyId")
+ advisor_symphony_id: Decimal = Field(alias="advisorSymphonyId")
+ external_network: StrictStr = Field(description="External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE", alias="externalNetwork")
+ contact: StrictBool = Field(description="Boolean indicating whether added member is an advisor (false) or a federated user (true)")
+ emp_channel_connector: Optional[StrictStr] = Field(default=None, description="ID of the Emp channel Connector to use to reach the federated user. Required for LINE in case automatic LINE channel selection feature is not enabled for your tenant, not applicable for the other external networks.", alias="empChannelConnector")
+ __properties: ClassVar[List[str]] = ["memberSymphonyId", "advisorSymphonyId", "externalNetwork", "contact", "empChannelConnector"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of RoomMemberRequestv2 from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of RoomMemberRequestv2 from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "memberSymphonyId": obj.get("memberSymphonyId"),
+ "advisorSymphonyId": obj.get("advisorSymphonyId"),
+ "externalNetwork": obj.get("externalNetwork"),
+ "contact": obj.get("contact") if obj.get("contact") is not None else False,
+ "empChannelConnector": obj.get("empChannelConnector")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/room_member_response.py b/symphony/bdk/gen/federation_model/room_member_response.py
new file mode 100644
index 00000000..e22740e8
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/room_member_response.py
@@ -0,0 +1,113 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from symphony.bdk.gen.federation_model.emp_channel_connector import EmpChannelConnector
+from typing import Optional, Set
+from typing_extensions import Self
+
+class RoomMemberResponse(BaseModel):
+ """
+ RoomMemberResponse
+ """ # noqa: E501
+ stream_id: Optional[StrictStr] = Field(default=None, alias="streamId")
+ symphony_id: Optional[StrictStr] = Field(default=None, alias="symphonyId")
+ federated_user_id: Optional[StrictStr] = Field(default=None, alias="federatedUserId")
+ external_network: Optional[StrictStr] = Field(default=None, description="External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE", alias="externalNetwork")
+ first_name: Optional[StrictStr] = Field(default=None, alias="firstName")
+ last_name: Optional[StrictStr] = Field(default=None, alias="lastName")
+ company_name: Optional[StrictStr] = Field(default=None, alias="companyName")
+ avatar: Optional[StrictStr] = None
+ display_name: Optional[StrictStr] = Field(default=None, alias="displayName")
+ email_address: Optional[StrictStr] = Field(default=None, alias="emailAddress")
+ is_owner: Optional[StrictBool] = Field(default=None, alias="isOwner")
+ emp_channel_connector: Optional[EmpChannelConnector] = Field(default=None, description="Network channel connector used for room member. Only for LINE", alias="empChannelConnector")
+ __properties: ClassVar[List[str]] = ["streamId", "symphonyId", "federatedUserId", "externalNetwork", "firstName", "lastName", "companyName", "avatar", "displayName", "emailAddress", "isOwner", "empChannelConnector"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of RoomMemberResponse from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ # override the default output from pydantic by calling `to_dict()` of emp_channel_connector
+ if self.emp_channel_connector:
+ _dict['empChannelConnector'] = self.emp_channel_connector.to_dict()
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of RoomMemberResponse from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "streamId": obj.get("streamId"),
+ "symphonyId": obj.get("symphonyId"),
+ "federatedUserId": obj.get("federatedUserId"),
+ "externalNetwork": obj.get("externalNetwork"),
+ "firstName": obj.get("firstName"),
+ "lastName": obj.get("lastName"),
+ "companyName": obj.get("companyName"),
+ "avatar": obj.get("avatar"),
+ "displayName": obj.get("displayName"),
+ "emailAddress": obj.get("emailAddress"),
+ "isOwner": obj.get("isOwner"),
+ "empChannelConnector": EmpChannelConnector.from_dict(obj["empChannelConnector"]) if obj.get("empChannelConnector") is not None else None
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/room_members_response.py b/symphony/bdk/gen/federation_model/room_members_response.py
new file mode 100644
index 00000000..1a135030
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/room_members_response.py
@@ -0,0 +1,101 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict
+from typing import Any, ClassVar, Dict, List, Optional
+from symphony.bdk.gen.federation_model.pagination import Pagination
+from symphony.bdk.gen.federation_model.room_member_response import RoomMemberResponse
+from typing import Optional, Set
+from typing_extensions import Self
+
+class RoomMembersResponse(BaseModel):
+ """
+ RoomMembersResponse
+ """ # noqa: E501
+ members: Optional[List[RoomMemberResponse]] = None
+ pagination: Optional[Pagination] = None
+ __properties: ClassVar[List[str]] = ["members", "pagination"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of RoomMembersResponse from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ # override the default output from pydantic by calling `to_dict()` of each item in members (list)
+ _items = []
+ if self.members:
+ for _item_members in self.members:
+ if _item_members:
+ _items.append(_item_members.to_dict())
+ _dict['members'] = _items
+ # override the default output from pydantic by calling `to_dict()` of pagination
+ if self.pagination:
+ _dict['pagination'] = self.pagination.to_dict()
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of RoomMembersResponse from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "members": [RoomMemberResponse.from_dict(_item) for _item in obj["members"]] if obj.get("members") is not None else None,
+ "pagination": Pagination.from_dict(obj["pagination"]) if obj.get("pagination") is not None else None
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/room_not_found.py b/symphony/bdk/gen/federation_model/room_not_found.py
new file mode 100644
index 00000000..625167a1
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/room_not_found.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class RoomNotFound(BaseModel):
+ """
+ Room not found
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of RoomNotFound from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of RoomNotFound from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/room_request.py b/symphony/bdk/gen/federation_model/room_request.py
new file mode 100644
index 00000000..6dddcaef
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/room_request.py
@@ -0,0 +1,92 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, Field, StrictStr
+from typing import Any, ClassVar, Dict, List
+from typing_extensions import Annotated
+from typing import Optional, Set
+from typing_extensions import Self
+
+class RoomRequest(BaseModel):
+ """
+ RoomRequest
+ """ # noqa: E501
+ room_name: Annotated[str, Field(strict=True, max_length=50)] = Field(alias="roomName")
+ advisor_email_address: StrictStr = Field(alias="advisorEmailAddress")
+ external_network: Annotated[str, Field(strict=True, max_length=50)] = Field(description="External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE", alias="externalNetwork")
+ __properties: ClassVar[List[str]] = ["roomName", "advisorEmailAddress", "externalNetwork"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of RoomRequest from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of RoomRequest from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "roomName": obj.get("roomName"),
+ "advisorEmailAddress": obj.get("advisorEmailAddress"),
+ "externalNetwork": obj.get("externalNetwork")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/room_requestv2.py b/symphony/bdk/gen/federation_model/room_requestv2.py
new file mode 100644
index 00000000..df1b9672
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/room_requestv2.py
@@ -0,0 +1,97 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from decimal import Decimal
+from pydantic import BaseModel, ConfigDict, Field, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing_extensions import Annotated
+from typing import Optional, Set
+from typing_extensions import Self
+
+class RoomRequestv2(BaseModel):
+ """
+ RoomRequestv2
+ """ # noqa: E501
+ room_name: Annotated[str, Field(strict=True, max_length=50)] = Field(alias="roomName")
+ federation_group_id: Optional[StrictStr] = Field(default=None, alias="federationGroupId")
+ external_network_room_display_name: Optional[Annotated[str, Field(strict=True, max_length=50)]] = Field(default=None, alias="externalNetworkRoomDisplayName")
+ owner_symphony_id: Decimal = Field(alias="ownerSymphonyId")
+ external_network: Annotated[str, Field(strict=True, max_length=50)] = Field(description="External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE", alias="externalNetwork")
+ __properties: ClassVar[List[str]] = ["roomName", "federationGroupId", "externalNetworkRoomDisplayName", "ownerSymphonyId", "externalNetwork"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of RoomRequestv2 from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of RoomRequestv2 from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "roomName": obj.get("roomName"),
+ "federationGroupId": obj.get("federationGroupId"),
+ "externalNetworkRoomDisplayName": obj.get("externalNetworkRoomDisplayName"),
+ "ownerSymphonyId": obj.get("ownerSymphonyId"),
+ "externalNetwork": obj.get("externalNetwork")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/room_response.py b/symphony/bdk/gen/federation_model/room_response.py
new file mode 100644
index 00000000..5f561010
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/room_response.py
@@ -0,0 +1,132 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from datetime import datetime
+from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr, field_validator
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class RoomResponse(BaseModel):
+ """
+ RoomResponse
+ """ # noqa: E501
+ stream_id: Optional[StrictStr] = Field(default=None, alias="streamId")
+ room_name: Optional[StrictStr] = Field(default=None, alias="roomName")
+ advisor_symphony_id: Optional[StrictStr] = Field(default=None, alias="advisorSymphonyId")
+ federation_group_id: Optional[StrictStr] = Field(default=None, alias="federationGroupId")
+ created: Optional[datetime] = None
+ updated: Optional[datetime] = None
+ room_type: Optional[StrictStr] = Field(default=None, alias="roomType")
+ members_count: Optional[StrictInt] = Field(default=None, alias="membersCount")
+ company: Optional[StrictStr] = None
+ room_status: Optional[StrictStr] = Field(default=None, alias="roomStatus")
+ limited_members_count: Optional[StrictInt] = Field(default=None, alias="limitedMembersCount")
+ pending_members_count: Optional[StrictInt] = Field(default=None, alias="pendingMembersCount")
+ unknown_status_members_count: Optional[StrictInt] = Field(default=None, alias="unknownStatusMembersCount")
+ __properties: ClassVar[List[str]] = ["streamId", "roomName", "advisorSymphonyId", "federationGroupId", "created", "updated", "roomType", "membersCount", "company", "roomStatus", "limitedMembersCount", "pendingMembersCount", "unknownStatusMembersCount"]
+
+ @field_validator('room_type')
+ def room_type_validate_enum(cls, value):
+ """Validates the enum"""
+ if value is None:
+ return value
+
+ if value not in set(['ROOM', 'IM']):
+ raise ValueError("must be one of enum values ('ROOM', 'IM')")
+ return value
+
+ @field_validator('room_status')
+ def room_status_validate_enum(cls, value):
+ """Validates the enum"""
+ if value is None:
+ return value
+
+ if value not in set(['ACTIVE', 'LIMITED', 'DEACTIVATED', 'UNKNOWN']):
+ raise ValueError("must be one of enum values ('ACTIVE', 'LIMITED', 'DEACTIVATED', 'UNKNOWN')")
+ return value
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of RoomResponse from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of RoomResponse from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "streamId": obj.get("streamId"),
+ "roomName": obj.get("roomName"),
+ "advisorSymphonyId": obj.get("advisorSymphonyId"),
+ "federationGroupId": obj.get("federationGroupId"),
+ "created": obj.get("created"),
+ "updated": obj.get("updated"),
+ "roomType": obj.get("roomType"),
+ "membersCount": obj.get("membersCount"),
+ "company": obj.get("company"),
+ "roomStatus": obj.get("roomStatus"),
+ "limitedMembersCount": obj.get("limitedMembersCount"),
+ "pendingMembersCount": obj.get("pendingMembersCount"),
+ "unknownStatusMembersCount": obj.get("unknownStatusMembersCount")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/room_set_activity_request.py b/symphony/bdk/gen/federation_model/room_set_activity_request.py
new file mode 100644
index 00000000..098feb86
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/room_set_activity_request.py
@@ -0,0 +1,87 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, Field, StrictBool
+from typing import Any, ClassVar, Dict, List
+from typing import Optional, Set
+from typing_extensions import Self
+
+class RoomSetActivityRequest(BaseModel):
+ """
+ RoomSetActivityRequest
+ """ # noqa: E501
+ set_active: StrictBool = Field(alias="setActive")
+ __properties: ClassVar[List[str]] = ["setActive"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of RoomSetActivityRequest from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of RoomSetActivityRequest from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "setActive": obj.get("setActive")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/room_set_activity_response.py b/symphony/bdk/gen/federation_model/room_set_activity_response.py
new file mode 100644
index 00000000..a5c67333
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/room_set_activity_response.py
@@ -0,0 +1,99 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictStr, field_validator
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class RoomSetActivityResponse(BaseModel):
+ """
+ RoomSetActivityResponse
+ """ # noqa: E501
+ is_room_activity_updated: Optional[StrictBool] = Field(default=None, alias="isRoomActivityUpdated")
+ new_room_status: Optional[StrictStr] = Field(default=None, alias="newRoomStatus")
+ __properties: ClassVar[List[str]] = ["isRoomActivityUpdated", "newRoomStatus"]
+
+ @field_validator('new_room_status')
+ def new_room_status_validate_enum(cls, value):
+ """Validates the enum"""
+ if value is None:
+ return value
+
+ if value not in set(['ACTIVE', 'DEACTIVATED']):
+ raise ValueError("must be one of enum values ('ACTIVE', 'DEACTIVATED')")
+ return value
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of RoomSetActivityResponse from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of RoomSetActivityResponse from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "isRoomActivityUpdated": obj.get("isRoomActivityUpdated"),
+ "newRoomStatus": obj.get("newRoomStatus")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/room_set_federation_group_request.py b/symphony/bdk/gen/federation_model/room_set_federation_group_request.py
new file mode 100644
index 00000000..d030fd60
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/room_set_federation_group_request.py
@@ -0,0 +1,89 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class RoomSetFederationGroupRequest(BaseModel):
+ """
+ RoomSetFederationGroupRequest
+ """ # noqa: E501
+ federation_group_id: Optional[StrictStr] = Field(default=None, alias="federationGroupId")
+ move_to_default: Optional[StrictBool] = Field(default=None, alias="moveToDefault")
+ __properties: ClassVar[List[str]] = ["federationGroupId", "moveToDefault"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of RoomSetFederationGroupRequest from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of RoomSetFederationGroupRequest from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "federationGroupId": obj.get("federationGroupId"),
+ "moveToDefault": obj.get("moveToDefault")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/room_update_federation_group_errors.py b/symphony/bdk/gen/federation_model/room_update_federation_group_errors.py
new file mode 100644
index 00000000..af64ca51
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/room_update_federation_group_errors.py
@@ -0,0 +1,101 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from symphony.bdk.gen.federation_model.room_update_federation_group_errors_errors_inner import RoomUpdateFederationGroupErrorsErrorsInner
+from typing import Optional, Set
+from typing_extensions import Self
+
+class RoomUpdateFederationGroupErrors(BaseModel):
+ """
+ RoomUpdateFederationGroupErrors
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ errors: Optional[List[RoomUpdateFederationGroupErrorsErrorsInner]] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status", "errors"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of RoomUpdateFederationGroupErrors from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ # override the default output from pydantic by calling `to_dict()` of each item in errors (list)
+ _items = []
+ if self.errors:
+ for _item_errors in self.errors:
+ if _item_errors:
+ _items.append(_item_errors.to_dict())
+ _dict['errors'] = _items
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of RoomUpdateFederationGroupErrors from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status"),
+ "errors": [RoomUpdateFederationGroupErrorsErrorsInner.from_dict(_item) for _item in obj["errors"]] if obj.get("errors") is not None else None
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/room_update_federation_group_errors_errors_inner.py b/symphony/bdk/gen/federation_model/room_update_federation_group_errors_errors_inner.py
new file mode 100644
index 00000000..633d36e5
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/room_update_federation_group_errors_errors_inner.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, Field, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class RoomUpdateFederationGroupErrorsErrorsInner(BaseModel):
+ """
+ RoomUpdateFederationGroupErrorsErrorsInner
+ """ # noqa: E501
+ symphony_id: Optional[StrictStr] = Field(default=None, alias="symphonyId")
+ reason: Optional[StrictStr] = Field(default=None, description="External network specific error related to each room channel")
+ error_code: Optional[StrictStr] = Field(default=None, description="External network specific error code", alias="errorCode")
+ __properties: ClassVar[List[str]] = ["symphonyId", "reason", "errorCode"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of RoomUpdateFederationGroupErrorsErrorsInner from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of RoomUpdateFederationGroupErrorsErrorsInner from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "symphonyId": obj.get("symphonyId"),
+ "reason": obj.get("reason"),
+ "errorCode": obj.get("errorCode")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/rooms_response.py b/symphony/bdk/gen/federation_model/rooms_response.py
new file mode 100644
index 00000000..135da21a
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/rooms_response.py
@@ -0,0 +1,101 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict
+from typing import Any, ClassVar, Dict, List, Optional
+from symphony.bdk.gen.federation_model.pagination import Pagination
+from symphony.bdk.gen.federation_model.room_response import RoomResponse
+from typing import Optional, Set
+from typing_extensions import Self
+
+class RoomsResponse(BaseModel):
+ """
+ RoomsResponse
+ """ # noqa: E501
+ rooms: Optional[List[RoomResponse]] = None
+ pagination: Optional[Pagination] = None
+ __properties: ClassVar[List[str]] = ["rooms", "pagination"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of RoomsResponse from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ # override the default output from pydantic by calling `to_dict()` of each item in rooms (list)
+ _items = []
+ if self.rooms:
+ for _item_rooms in self.rooms:
+ if _item_rooms:
+ _items.append(_item_rooms.to_dict())
+ _dict['rooms'] = _items
+ # override the default output from pydantic by calling `to_dict()` of pagination
+ if self.pagination:
+ _dict['pagination'] = self.pagination.to_dict()
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of RoomsResponse from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "rooms": [RoomResponse.from_dict(_item) for _item in obj["rooms"]] if obj.get("rooms") is not None else None,
+ "pagination": Pagination.from_dict(obj["pagination"]) if obj.get("pagination") is not None else None
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/search_contact_response.py b/symphony/bdk/gen/federation_model/search_contact_response.py
new file mode 100644
index 00000000..bf29d27d
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/search_contact_response.py
@@ -0,0 +1,141 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from datetime import datetime
+from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictStr, field_validator
+from typing import Any, ClassVar, Dict, List, Optional
+from symphony.bdk.gen.federation_model.blocked_by_item import BlockedByItem
+from symphony.bdk.gen.federation_model.contact_status import ContactStatus
+from symphony.bdk.gen.federation_model.room_creation_response import RoomCreationResponse
+from typing import Optional, Set
+from typing_extensions import Self
+
+class SearchContactResponse(BaseModel):
+ """
+ SearchContactResponse
+ """ # noqa: E501
+ first_name: Optional[StrictStr] = Field(default=None, alias="firstName")
+ last_name: Optional[StrictStr] = Field(default=None, alias="lastName")
+ company_name: Optional[StrictStr] = Field(default=None, alias="companyName")
+ email_address: Optional[StrictStr] = Field(default=None, alias="emailAddress")
+ phone_number: Optional[StrictStr] = Field(default=None, alias="phoneNumber")
+ external_network: Optional[StrictStr] = Field(default=None, description="External network : WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE", alias="externalNetwork")
+ symphony_id: Optional[StrictStr] = Field(default=None, alias="symphonyId")
+ status: Optional[ContactStatus] = None
+ status_update_date: Optional[datetime] = Field(default=None, alias="statusUpdateDate")
+ own_advisor_id: Optional[StrictStr] = Field(default=None, alias="ownAdvisorId")
+ preferred_language: Optional[StrictStr] = Field(default=None, alias="preferredLanguage")
+ invitation_code: Optional[StrictStr] = Field(default=None, alias="invitationCode")
+ room: Optional[RoomCreationResponse] = None
+ is_colleague: Optional[StrictBool] = Field(default=False, alias="isColleague")
+ consent: Optional[StrictStr] = None
+ phone_number_blocked_by: Optional[List[BlockedByItem]] = Field(default=None, alias="phoneNumberBlockedBy")
+ __properties: ClassVar[List[str]] = ["firstName", "lastName", "companyName", "emailAddress", "phoneNumber", "externalNetwork", "symphonyId", "status", "statusUpdateDate", "ownAdvisorId", "preferredLanguage", "invitationCode", "room", "isColleague", "consent", "phoneNumberBlockedBy"]
+
+ @field_validator('consent')
+ def consent_validate_enum(cls, value):
+ """Validates the enum"""
+ if value is None:
+ return value
+
+ if value not in set(['OPTED_IN', 'OPTED_OUT', 'PENDING']):
+ raise ValueError("must be one of enum values ('OPTED_IN', 'OPTED_OUT', 'PENDING')")
+ return value
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of SearchContactResponse from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ # override the default output from pydantic by calling `to_dict()` of room
+ if self.room:
+ _dict['room'] = self.room.to_dict()
+ # override the default output from pydantic by calling `to_dict()` of each item in phone_number_blocked_by (list)
+ _items = []
+ if self.phone_number_blocked_by:
+ for _item_phone_number_blocked_by in self.phone_number_blocked_by:
+ if _item_phone_number_blocked_by:
+ _items.append(_item_phone_number_blocked_by.to_dict())
+ _dict['phoneNumberBlockedBy'] = _items
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of SearchContactResponse from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "firstName": obj.get("firstName"),
+ "lastName": obj.get("lastName"),
+ "companyName": obj.get("companyName"),
+ "emailAddress": obj.get("emailAddress"),
+ "phoneNumber": obj.get("phoneNumber"),
+ "externalNetwork": obj.get("externalNetwork"),
+ "symphonyId": obj.get("symphonyId"),
+ "status": obj.get("status"),
+ "statusUpdateDate": obj.get("statusUpdateDate"),
+ "ownAdvisorId": obj.get("ownAdvisorId"),
+ "preferredLanguage": obj.get("preferredLanguage"),
+ "invitationCode": obj.get("invitationCode"),
+ "room": RoomCreationResponse.from_dict(obj["room"]) if obj.get("room") is not None else None,
+ "isColleague": obj.get("isColleague") if obj.get("isColleague") is not None else False,
+ "consent": obj.get("consent"),
+ "phoneNumberBlockedBy": [BlockedByItem.from_dict(_item) for _item in obj["phoneNumberBlockedBy"]] if obj.get("phoneNumberBlockedBy") is not None else None
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/search_contacts_response.py b/symphony/bdk/gen/federation_model/search_contacts_response.py
new file mode 100644
index 00000000..895fb05c
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/search_contacts_response.py
@@ -0,0 +1,101 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict
+from typing import Any, ClassVar, Dict, List, Optional
+from symphony.bdk.gen.federation_model.pagination import Pagination
+from symphony.bdk.gen.federation_model.search_contact_response import SearchContactResponse
+from typing import Optional, Set
+from typing_extensions import Self
+
+class SearchContactsResponse(BaseModel):
+ """
+ SearchContactsResponse
+ """ # noqa: E501
+ contacts: Optional[List[SearchContactResponse]] = None
+ pagination: Optional[Pagination] = None
+ __properties: ClassVar[List[str]] = ["contacts", "pagination"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of SearchContactsResponse from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ # override the default output from pydantic by calling `to_dict()` of each item in contacts (list)
+ _items = []
+ if self.contacts:
+ for _item_contacts in self.contacts:
+ if _item_contacts:
+ _items.append(_item_contacts.to_dict())
+ _dict['contacts'] = _items
+ # override the default output from pydantic by calling `to_dict()` of pagination
+ if self.pagination:
+ _dict['pagination'] = self.pagination.to_dict()
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of SearchContactsResponse from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "contacts": [SearchContactResponse.from_dict(_item) for _item in obj["contacts"]] if obj.get("contacts") is not None else None,
+ "pagination": Pagination.from_dict(obj["pagination"]) if obj.get("pagination") is not None else None
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/subnetwork_not_implemented.py b/symphony/bdk/gen/federation_model/subnetwork_not_implemented.py
new file mode 100644
index 00000000..30302899
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/subnetwork_not_implemented.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class SubnetworkNotImplemented(BaseModel):
+ """
+ Subnetwork not implemented.
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of SubnetworkNotImplemented from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of SubnetworkNotImplemented from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/symphony_user_not_found_problem.py b/symphony/bdk/gen/federation_model/symphony_user_not_found_problem.py
new file mode 100644
index 00000000..83ede239
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/symphony_user_not_found_problem.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class SymphonyUserNotFoundProblem(BaseModel):
+ """
+ Symphony user not found.
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of SymphonyUserNotFoundProblem from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of SymphonyUserNotFoundProblem from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/tenant_configuration_not_found.py b/symphony/bdk/gen/federation_model/tenant_configuration_not_found.py
new file mode 100644
index 00000000..45e10bcf
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/tenant_configuration_not_found.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class TenantConfigurationNotFound(BaseModel):
+ """
+ Tenant configuration not found.
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of TenantConfigurationNotFound from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of TenantConfigurationNotFound from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/tenant_not_found.py b/symphony/bdk/gen/federation_model/tenant_not_found.py
new file mode 100644
index 00000000..31a92a21
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/tenant_not_found.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class TenantNotFound(BaseModel):
+ """
+ Tenant not found
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of TenantNotFound from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of TenantNotFound from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/transfer_room_ownership404_response.py b/symphony/bdk/gen/federation_model/transfer_room_ownership404_response.py
new file mode 100644
index 00000000..5e145dff
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/transfer_room_ownership404_response.py
@@ -0,0 +1,151 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import json
+import pprint
+from pydantic import BaseModel, ConfigDict, Field, StrictStr, ValidationError, field_validator
+from typing import Any, List, Optional
+from symphony.bdk.gen.federation_model.advisor_not_found import AdvisorNotFound
+from symphony.bdk.gen.federation_model.room_not_found import RoomNotFound
+from symphony.bdk.gen.federation_model.tenant_configuration_not_found import TenantConfigurationNotFound
+from pydantic import StrictStr, Field
+from typing import Union, List, Set, Optional, Dict
+from typing_extensions import Literal, Self
+
+TRANSFERROOMOWNERSHIP404RESPONSE_ONE_OF_SCHEMAS = ["AdvisorNotFound", "RoomNotFound", "TenantConfigurationNotFound"]
+
+class TransferRoomOwnership404Response(BaseModel):
+ """
+ TransferRoomOwnership404Response
+ """
+ # data type: TenantConfigurationNotFound
+ oneof_schema_1_validator: Optional[TenantConfigurationNotFound] = None
+ # data type: AdvisorNotFound
+ oneof_schema_2_validator: Optional[AdvisorNotFound] = None
+ # data type: RoomNotFound
+ oneof_schema_3_validator: Optional[RoomNotFound] = None
+ actual_instance: Optional[Union[AdvisorNotFound, RoomNotFound, TenantConfigurationNotFound]] = None
+ one_of_schemas: Set[str] = { "AdvisorNotFound", "RoomNotFound", "TenantConfigurationNotFound" }
+
+ model_config = ConfigDict(
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def __init__(self, *args, **kwargs) -> None:
+ if args:
+ if len(args) > 1:
+ raise ValueError("If a position argument is used, only 1 is allowed to set `actual_instance`")
+ if kwargs:
+ raise ValueError("If a position argument is used, keyword arguments cannot be used.")
+ super().__init__(actual_instance=args[0])
+ else:
+ super().__init__(**kwargs)
+
+ @field_validator('actual_instance')
+ def actual_instance_must_validate_oneof(cls, v):
+ instance = TransferRoomOwnership404Response.model_construct()
+ error_messages = []
+ match = 0
+ # validate data type: TenantConfigurationNotFound
+ if not isinstance(v, TenantConfigurationNotFound):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `TenantConfigurationNotFound`")
+ else:
+ match += 1
+ # validate data type: AdvisorNotFound
+ if not isinstance(v, AdvisorNotFound):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `AdvisorNotFound`")
+ else:
+ match += 1
+ # validate data type: RoomNotFound
+ if not isinstance(v, RoomNotFound):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `RoomNotFound`")
+ else:
+ match += 1
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when setting `actual_instance` in TransferRoomOwnership404Response with oneOf schemas: AdvisorNotFound, RoomNotFound, TenantConfigurationNotFound. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when setting `actual_instance` in TransferRoomOwnership404Response with oneOf schemas: AdvisorNotFound, RoomNotFound, TenantConfigurationNotFound. Details: " + ", ".join(error_messages))
+ else:
+ return v
+
+ @classmethod
+ def from_dict(cls, obj: Union[str, Dict[str, Any]]) -> Self:
+ return cls.from_json(json.dumps(obj))
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Self:
+ """Returns the object represented by the json string"""
+ instance = cls.model_construct()
+ error_messages = []
+ match = 0
+
+ # deserialize data into TenantConfigurationNotFound
+ try:
+ instance.actual_instance = TenantConfigurationNotFound.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+ # deserialize data into AdvisorNotFound
+ try:
+ instance.actual_instance = AdvisorNotFound.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+ # deserialize data into RoomNotFound
+ try:
+ instance.actual_instance = RoomNotFound.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when deserializing the JSON string into TransferRoomOwnership404Response with oneOf schemas: AdvisorNotFound, RoomNotFound, TenantConfigurationNotFound. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when deserializing the JSON string into TransferRoomOwnership404Response with oneOf schemas: AdvisorNotFound, RoomNotFound, TenantConfigurationNotFound. Details: " + ", ".join(error_messages))
+ else:
+ return instance
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the actual instance"""
+ if self.actual_instance is None:
+ return "null"
+
+ if hasattr(self.actual_instance, "to_json") and callable(self.actual_instance.to_json):
+ return self.actual_instance.to_json()
+ else:
+ return json.dumps(self.actual_instance)
+
+ def to_dict(self) -> Optional[Union[Dict[str, Any], AdvisorNotFound, RoomNotFound, TenantConfigurationNotFound]]:
+ """Returns the dict representation of the actual instance"""
+ if self.actual_instance is None:
+ return None
+
+ if hasattr(self.actual_instance, "to_dict") and callable(self.actual_instance.to_dict):
+ return self.actual_instance.to_dict()
+ else:
+ # primitive type
+ return self.actual_instance
+
+ def to_str(self) -> str:
+ """Returns the string representation of the actual instance"""
+ return pprint.pformat(self.model_dump())
+
+
diff --git a/symphony/bdk/gen/federation_model/transfer_room_ownership409_response.py b/symphony/bdk/gen/federation_model/transfer_room_ownership409_response.py
new file mode 100644
index 00000000..1f270e7b
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/transfer_room_ownership409_response.py
@@ -0,0 +1,165 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import json
+import pprint
+from pydantic import BaseModel, ConfigDict, Field, StrictStr, ValidationError, field_validator
+from typing import Any, List, Optional
+from symphony.bdk.gen.federation_model.already_room_owner import AlreadyRoomOwner
+from symphony.bdk.gen.federation_model.cannot_transfer_room_ownership_duplicate_room_name import CannotTransferRoomOwnershipDuplicateRoomName
+from symphony.bdk.gen.federation_model.not_a_room_member import NotARoomMember
+from symphony.bdk.gen.federation_model.room_is_deactivated import RoomIsDeactivated
+from pydantic import StrictStr, Field
+from typing import Union, List, Set, Optional, Dict
+from typing_extensions import Literal, Self
+
+TRANSFERROOMOWNERSHIP409RESPONSE_ONE_OF_SCHEMAS = ["AlreadyRoomOwner", "CannotTransferRoomOwnershipDuplicateRoomName", "NotARoomMember", "RoomIsDeactivated"]
+
+class TransferRoomOwnership409Response(BaseModel):
+ """
+ TransferRoomOwnership409Response
+ """
+ # data type: AlreadyRoomOwner
+ oneof_schema_1_validator: Optional[AlreadyRoomOwner] = None
+ # data type: NotARoomMember
+ oneof_schema_2_validator: Optional[NotARoomMember] = None
+ # data type: RoomIsDeactivated
+ oneof_schema_3_validator: Optional[RoomIsDeactivated] = None
+ # data type: CannotTransferRoomOwnershipDuplicateRoomName
+ oneof_schema_4_validator: Optional[CannotTransferRoomOwnershipDuplicateRoomName] = None
+ actual_instance: Optional[Union[AlreadyRoomOwner, CannotTransferRoomOwnershipDuplicateRoomName, NotARoomMember, RoomIsDeactivated]] = None
+ one_of_schemas: Set[str] = { "AlreadyRoomOwner", "CannotTransferRoomOwnershipDuplicateRoomName", "NotARoomMember", "RoomIsDeactivated" }
+
+ model_config = ConfigDict(
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def __init__(self, *args, **kwargs) -> None:
+ if args:
+ if len(args) > 1:
+ raise ValueError("If a position argument is used, only 1 is allowed to set `actual_instance`")
+ if kwargs:
+ raise ValueError("If a position argument is used, keyword arguments cannot be used.")
+ super().__init__(actual_instance=args[0])
+ else:
+ super().__init__(**kwargs)
+
+ @field_validator('actual_instance')
+ def actual_instance_must_validate_oneof(cls, v):
+ instance = TransferRoomOwnership409Response.model_construct()
+ error_messages = []
+ match = 0
+ # validate data type: AlreadyRoomOwner
+ if not isinstance(v, AlreadyRoomOwner):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `AlreadyRoomOwner`")
+ else:
+ match += 1
+ # validate data type: NotARoomMember
+ if not isinstance(v, NotARoomMember):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `NotARoomMember`")
+ else:
+ match += 1
+ # validate data type: RoomIsDeactivated
+ if not isinstance(v, RoomIsDeactivated):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `RoomIsDeactivated`")
+ else:
+ match += 1
+ # validate data type: CannotTransferRoomOwnershipDuplicateRoomName
+ if not isinstance(v, CannotTransferRoomOwnershipDuplicateRoomName):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `CannotTransferRoomOwnershipDuplicateRoomName`")
+ else:
+ match += 1
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when setting `actual_instance` in TransferRoomOwnership409Response with oneOf schemas: AlreadyRoomOwner, CannotTransferRoomOwnershipDuplicateRoomName, NotARoomMember, RoomIsDeactivated. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when setting `actual_instance` in TransferRoomOwnership409Response with oneOf schemas: AlreadyRoomOwner, CannotTransferRoomOwnershipDuplicateRoomName, NotARoomMember, RoomIsDeactivated. Details: " + ", ".join(error_messages))
+ else:
+ return v
+
+ @classmethod
+ def from_dict(cls, obj: Union[str, Dict[str, Any]]) -> Self:
+ return cls.from_json(json.dumps(obj))
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Self:
+ """Returns the object represented by the json string"""
+ instance = cls.model_construct()
+ error_messages = []
+ match = 0
+
+ # deserialize data into AlreadyRoomOwner
+ try:
+ instance.actual_instance = AlreadyRoomOwner.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+ # deserialize data into NotARoomMember
+ try:
+ instance.actual_instance = NotARoomMember.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+ # deserialize data into RoomIsDeactivated
+ try:
+ instance.actual_instance = RoomIsDeactivated.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+ # deserialize data into CannotTransferRoomOwnershipDuplicateRoomName
+ try:
+ instance.actual_instance = CannotTransferRoomOwnershipDuplicateRoomName.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when deserializing the JSON string into TransferRoomOwnership409Response with oneOf schemas: AlreadyRoomOwner, CannotTransferRoomOwnershipDuplicateRoomName, NotARoomMember, RoomIsDeactivated. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when deserializing the JSON string into TransferRoomOwnership409Response with oneOf schemas: AlreadyRoomOwner, CannotTransferRoomOwnershipDuplicateRoomName, NotARoomMember, RoomIsDeactivated. Details: " + ", ".join(error_messages))
+ else:
+ return instance
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the actual instance"""
+ if self.actual_instance is None:
+ return "null"
+
+ if hasattr(self.actual_instance, "to_json") and callable(self.actual_instance.to_json):
+ return self.actual_instance.to_json()
+ else:
+ return json.dumps(self.actual_instance)
+
+ def to_dict(self) -> Optional[Union[Dict[str, Any], AlreadyRoomOwner, CannotTransferRoomOwnershipDuplicateRoomName, NotARoomMember, RoomIsDeactivated]]:
+ """Returns the dict representation of the actual instance"""
+ if self.actual_instance is None:
+ return None
+
+ if hasattr(self.actual_instance, "to_dict") and callable(self.actual_instance.to_dict):
+ return self.actual_instance.to_dict()
+ else:
+ # primitive type
+ return self.actual_instance
+
+ def to_str(self) -> str:
+ """Returns the string representation of the actual instance"""
+ return pprint.pformat(self.model_dump())
+
+
diff --git a/symphony/bdk/gen/federation_model/transfer_room_ownership_request.py b/symphony/bdk/gen/federation_model/transfer_room_ownership_request.py
new file mode 100644
index 00000000..d91c6379
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/transfer_room_ownership_request.py
@@ -0,0 +1,88 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from decimal import Decimal
+from pydantic import BaseModel, ConfigDict, Field
+from typing import Any, ClassVar, Dict, List
+from typing import Optional, Set
+from typing_extensions import Self
+
+class TransferRoomOwnershipRequest(BaseModel):
+ """
+ TransferRoomOwnershipRequest
+ """ # noqa: E501
+ new_room_owner_symphony_id: Decimal = Field(alias="newRoomOwnerSymphonyId")
+ __properties: ClassVar[List[str]] = ["newRoomOwnerSymphonyId"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of TransferRoomOwnershipRequest from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of TransferRoomOwnershipRequest from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "newRoomOwnerSymphonyId": obj.get("newRoomOwnerSymphonyId")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/unauthorized.py b/symphony/bdk/gen/federation_model/unauthorized.py
new file mode 100644
index 00000000..f110daa7
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/unauthorized.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class Unauthorized(BaseModel):
+ """
+ Full authentication is required to access this resource
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of Unauthorized from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of Unauthorized from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/update_account_failed.py b/symphony/bdk/gen/federation_model/update_account_failed.py
new file mode 100644
index 00000000..8ca76f43
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/update_account_failed.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class UpdateAccountFailed(BaseModel):
+ """
+ Gateway microservice cannot update the Symphony account.
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of UpdateAccountFailed from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of UpdateAccountFailed from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/update_advisor_federation_group400_response.py b/symphony/bdk/gen/federation_model/update_advisor_federation_group400_response.py
new file mode 100644
index 00000000..58e38562
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/update_advisor_federation_group400_response.py
@@ -0,0 +1,151 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import json
+import pprint
+from pydantic import BaseModel, ConfigDict, Field, StrictStr, ValidationError, field_validator
+from typing import Any, List, Optional
+from symphony.bdk.gen.federation_model.external_network_not_found import ExternalNetworkNotFound
+from symphony.bdk.gen.federation_model.missing_destination_federation_group import MissingDestinationFederationGroup
+from symphony.bdk.gen.federation_model.multiple_destination_federation_group import MultipleDestinationFederationGroup
+from pydantic import StrictStr, Field
+from typing import Union, List, Set, Optional, Dict
+from typing_extensions import Literal, Self
+
+UPDATEADVISORFEDERATIONGROUP400RESPONSE_ONE_OF_SCHEMAS = ["ExternalNetworkNotFound", "MissingDestinationFederationGroup", "MultipleDestinationFederationGroup"]
+
+class UpdateAdvisorFederationGroup400Response(BaseModel):
+ """
+ UpdateAdvisorFederationGroup400Response
+ """
+ # data type: MissingDestinationFederationGroup
+ oneof_schema_1_validator: Optional[MissingDestinationFederationGroup] = None
+ # data type: MultipleDestinationFederationGroup
+ oneof_schema_2_validator: Optional[MultipleDestinationFederationGroup] = None
+ # data type: ExternalNetworkNotFound
+ oneof_schema_3_validator: Optional[ExternalNetworkNotFound] = None
+ actual_instance: Optional[Union[ExternalNetworkNotFound, MissingDestinationFederationGroup, MultipleDestinationFederationGroup]] = None
+ one_of_schemas: Set[str] = { "ExternalNetworkNotFound", "MissingDestinationFederationGroup", "MultipleDestinationFederationGroup" }
+
+ model_config = ConfigDict(
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def __init__(self, *args, **kwargs) -> None:
+ if args:
+ if len(args) > 1:
+ raise ValueError("If a position argument is used, only 1 is allowed to set `actual_instance`")
+ if kwargs:
+ raise ValueError("If a position argument is used, keyword arguments cannot be used.")
+ super().__init__(actual_instance=args[0])
+ else:
+ super().__init__(**kwargs)
+
+ @field_validator('actual_instance')
+ def actual_instance_must_validate_oneof(cls, v):
+ instance = UpdateAdvisorFederationGroup400Response.model_construct()
+ error_messages = []
+ match = 0
+ # validate data type: MissingDestinationFederationGroup
+ if not isinstance(v, MissingDestinationFederationGroup):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `MissingDestinationFederationGroup`")
+ else:
+ match += 1
+ # validate data type: MultipleDestinationFederationGroup
+ if not isinstance(v, MultipleDestinationFederationGroup):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `MultipleDestinationFederationGroup`")
+ else:
+ match += 1
+ # validate data type: ExternalNetworkNotFound
+ if not isinstance(v, ExternalNetworkNotFound):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `ExternalNetworkNotFound`")
+ else:
+ match += 1
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when setting `actual_instance` in UpdateAdvisorFederationGroup400Response with oneOf schemas: ExternalNetworkNotFound, MissingDestinationFederationGroup, MultipleDestinationFederationGroup. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when setting `actual_instance` in UpdateAdvisorFederationGroup400Response with oneOf schemas: ExternalNetworkNotFound, MissingDestinationFederationGroup, MultipleDestinationFederationGroup. Details: " + ", ".join(error_messages))
+ else:
+ return v
+
+ @classmethod
+ def from_dict(cls, obj: Union[str, Dict[str, Any]]) -> Self:
+ return cls.from_json(json.dumps(obj))
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Self:
+ """Returns the object represented by the json string"""
+ instance = cls.model_construct()
+ error_messages = []
+ match = 0
+
+ # deserialize data into MissingDestinationFederationGroup
+ try:
+ instance.actual_instance = MissingDestinationFederationGroup.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+ # deserialize data into MultipleDestinationFederationGroup
+ try:
+ instance.actual_instance = MultipleDestinationFederationGroup.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+ # deserialize data into ExternalNetworkNotFound
+ try:
+ instance.actual_instance = ExternalNetworkNotFound.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when deserializing the JSON string into UpdateAdvisorFederationGroup400Response with oneOf schemas: ExternalNetworkNotFound, MissingDestinationFederationGroup, MultipleDestinationFederationGroup. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when deserializing the JSON string into UpdateAdvisorFederationGroup400Response with oneOf schemas: ExternalNetworkNotFound, MissingDestinationFederationGroup, MultipleDestinationFederationGroup. Details: " + ", ".join(error_messages))
+ else:
+ return instance
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the actual instance"""
+ if self.actual_instance is None:
+ return "null"
+
+ if hasattr(self.actual_instance, "to_json") and callable(self.actual_instance.to_json):
+ return self.actual_instance.to_json()
+ else:
+ return json.dumps(self.actual_instance)
+
+ def to_dict(self) -> Optional[Union[Dict[str, Any], ExternalNetworkNotFound, MissingDestinationFederationGroup, MultipleDestinationFederationGroup]]:
+ """Returns the dict representation of the actual instance"""
+ if self.actual_instance is None:
+ return None
+
+ if hasattr(self.actual_instance, "to_dict") and callable(self.actual_instance.to_dict):
+ return self.actual_instance.to_dict()
+ else:
+ # primitive type
+ return self.actual_instance
+
+ def to_str(self) -> str:
+ """Returns the string representation of the actual instance"""
+ return pprint.pformat(self.model_dump())
+
+
diff --git a/symphony/bdk/gen/federation_model/update_advisor_federation_group404_response.py b/symphony/bdk/gen/federation_model/update_advisor_federation_group404_response.py
new file mode 100644
index 00000000..7185d73b
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/update_advisor_federation_group404_response.py
@@ -0,0 +1,137 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import json
+import pprint
+from pydantic import BaseModel, ConfigDict, Field, StrictStr, ValidationError, field_validator
+from typing import Any, List, Optional
+from symphony.bdk.gen.federation_model.advisor_not_found import AdvisorNotFound
+from symphony.bdk.gen.federation_model.federation_group_not_found import FederationGroupNotFound
+from pydantic import StrictStr, Field
+from typing import Union, List, Set, Optional, Dict
+from typing_extensions import Literal, Self
+
+UPDATEADVISORFEDERATIONGROUP404RESPONSE_ONE_OF_SCHEMAS = ["AdvisorNotFound", "FederationGroupNotFound"]
+
+class UpdateAdvisorFederationGroup404Response(BaseModel):
+ """
+ UpdateAdvisorFederationGroup404Response
+ """
+ # data type: FederationGroupNotFound
+ oneof_schema_1_validator: Optional[FederationGroupNotFound] = None
+ # data type: AdvisorNotFound
+ oneof_schema_2_validator: Optional[AdvisorNotFound] = None
+ actual_instance: Optional[Union[AdvisorNotFound, FederationGroupNotFound]] = None
+ one_of_schemas: Set[str] = { "AdvisorNotFound", "FederationGroupNotFound" }
+
+ model_config = ConfigDict(
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def __init__(self, *args, **kwargs) -> None:
+ if args:
+ if len(args) > 1:
+ raise ValueError("If a position argument is used, only 1 is allowed to set `actual_instance`")
+ if kwargs:
+ raise ValueError("If a position argument is used, keyword arguments cannot be used.")
+ super().__init__(actual_instance=args[0])
+ else:
+ super().__init__(**kwargs)
+
+ @field_validator('actual_instance')
+ def actual_instance_must_validate_oneof(cls, v):
+ instance = UpdateAdvisorFederationGroup404Response.model_construct()
+ error_messages = []
+ match = 0
+ # validate data type: FederationGroupNotFound
+ if not isinstance(v, FederationGroupNotFound):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `FederationGroupNotFound`")
+ else:
+ match += 1
+ # validate data type: AdvisorNotFound
+ if not isinstance(v, AdvisorNotFound):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `AdvisorNotFound`")
+ else:
+ match += 1
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when setting `actual_instance` in UpdateAdvisorFederationGroup404Response with oneOf schemas: AdvisorNotFound, FederationGroupNotFound. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when setting `actual_instance` in UpdateAdvisorFederationGroup404Response with oneOf schemas: AdvisorNotFound, FederationGroupNotFound. Details: " + ", ".join(error_messages))
+ else:
+ return v
+
+ @classmethod
+ def from_dict(cls, obj: Union[str, Dict[str, Any]]) -> Self:
+ return cls.from_json(json.dumps(obj))
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Self:
+ """Returns the object represented by the json string"""
+ instance = cls.model_construct()
+ error_messages = []
+ match = 0
+
+ # deserialize data into FederationGroupNotFound
+ try:
+ instance.actual_instance = FederationGroupNotFound.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+ # deserialize data into AdvisorNotFound
+ try:
+ instance.actual_instance = AdvisorNotFound.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when deserializing the JSON string into UpdateAdvisorFederationGroup404Response with oneOf schemas: AdvisorNotFound, FederationGroupNotFound. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when deserializing the JSON string into UpdateAdvisorFederationGroup404Response with oneOf schemas: AdvisorNotFound, FederationGroupNotFound. Details: " + ", ".join(error_messages))
+ else:
+ return instance
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the actual instance"""
+ if self.actual_instance is None:
+ return "null"
+
+ if hasattr(self.actual_instance, "to_json") and callable(self.actual_instance.to_json):
+ return self.actual_instance.to_json()
+ else:
+ return json.dumps(self.actual_instance)
+
+ def to_dict(self) -> Optional[Union[Dict[str, Any], AdvisorNotFound, FederationGroupNotFound]]:
+ """Returns the dict representation of the actual instance"""
+ if self.actual_instance is None:
+ return None
+
+ if hasattr(self.actual_instance, "to_dict") and callable(self.actual_instance.to_dict):
+ return self.actual_instance.to_dict()
+ else:
+ # primitive type
+ return self.actual_instance
+
+ def to_str(self) -> str:
+ """Returns the string representation of the actual instance"""
+ return pprint.pformat(self.model_dump())
+
+
diff --git a/symphony/bdk/gen/federation_model/update_contact_request.py b/symphony/bdk/gen/federation_model/update_contact_request.py
new file mode 100644
index 00000000..9459fbc5
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/update_contact_request.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict
+from typing import Any, ClassVar, Dict, List, Optional
+from symphony.bdk.gen.federation_model.block_contact_information import BlockContactInformation
+from typing import Optional, Set
+from typing_extensions import Self
+
+class UpdateContactRequest(BaseModel):
+ """
+ UpdateContactRequest
+ """ # noqa: E501
+ blocked: Optional[BlockContactInformation] = None
+ __properties: ClassVar[List[str]] = ["blocked"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of UpdateContactRequest from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ # override the default output from pydantic by calling `to_dict()` of blocked
+ if self.blocked:
+ _dict['blocked'] = self.blocked.to_dict()
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of UpdateContactRequest from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "blocked": BlockContactInformation.from_dict(obj["blocked"]) if obj.get("blocked") is not None else None
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/update_contact_response.py b/symphony/bdk/gen/federation_model/update_contact_response.py
new file mode 100644
index 00000000..4fa62449
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/update_contact_response.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict
+from typing import Any, ClassVar, Dict, List, Optional
+from symphony.bdk.gen.federation_model.block_contact_information import BlockContactInformation
+from typing import Optional, Set
+from typing_extensions import Self
+
+class UpdateContactResponse(BaseModel):
+ """
+ UpdateContactResponse
+ """ # noqa: E501
+ blocked: Optional[BlockContactInformation] = None
+ __properties: ClassVar[List[str]] = ["blocked"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of UpdateContactResponse from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ # override the default output from pydantic by calling `to_dict()` of blocked
+ if self.blocked:
+ _dict['blocked'] = self.blocked.to_dict()
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of UpdateContactResponse from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "blocked": BlockContactInformation.from_dict(obj["blocked"]) if obj.get("blocked") is not None else None
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/update_contacts_request.py b/symphony/bdk/gen/federation_model/update_contacts_request.py
new file mode 100644
index 00000000..725c2cff
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/update_contacts_request.py
@@ -0,0 +1,96 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, Field, StrictStr
+from typing import Any, ClassVar, Dict, List
+from typing_extensions import Annotated
+from typing import Optional, Set
+from typing_extensions import Self
+
+class UpdateContactsRequest(BaseModel):
+ """
+ UpdateContactsRequest
+ """ # noqa: E501
+ first_name: StrictStr = Field(alias="firstName")
+ last_name: StrictStr = Field(alias="lastName")
+ company_name: Annotated[str, Field(strict=True, max_length=100)] = Field(alias="companyName")
+ phone_number: StrictStr = Field(alias="phoneNumber")
+ external_network: StrictStr = Field(description="WHATSAPP", alias="externalNetwork")
+ __properties: ClassVar[List[str]] = ["firstName", "lastName", "companyName", "phoneNumber", "externalNetwork"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of UpdateContactsRequest from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of UpdateContactsRequest from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "firstName": obj.get("firstName"),
+ "lastName": obj.get("lastName"),
+ "companyName": obj.get("companyName"),
+ "phoneNumber": obj.get("phoneNumber"),
+ "externalNetwork": obj.get("externalNetwork")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/update_contacts_response.py b/symphony/bdk/gen/federation_model/update_contacts_response.py
new file mode 100644
index 00000000..4b187e72
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/update_contacts_response.py
@@ -0,0 +1,101 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, Field, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class UpdateContactsResponse(BaseModel):
+ """
+ UpdateContactsResponse
+ """ # noqa: E501
+ first_name: Optional[StrictStr] = Field(default=None, alias="firstName")
+ last_name: Optional[StrictStr] = Field(default=None, alias="lastName")
+ company_name: Optional[StrictStr] = Field(default=None, alias="companyName")
+ email_address: Optional[StrictStr] = Field(default=None, alias="emailAddress")
+ phone_number: Optional[StrictStr] = Field(default=None, alias="phoneNumber")
+ external_network: Optional[StrictStr] = Field(default=None, description="External network: WECHAT or WHATSAPP or SMS or SMS-DIRECT or LINE", alias="externalNetwork")
+ symphony_id: Optional[StrictStr] = Field(default=None, description="Federated user Symphony ID", alias="symphonyId")
+ advisors: Optional[List[StrictStr]] = Field(default=None, description="Advisors Symphony IDs")
+ __properties: ClassVar[List[str]] = ["firstName", "lastName", "companyName", "emailAddress", "phoneNumber", "externalNetwork", "symphonyId", "advisors"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of UpdateContactsResponse from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of UpdateContactsResponse from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "firstName": obj.get("firstName"),
+ "lastName": obj.get("lastName"),
+ "companyName": obj.get("companyName"),
+ "emailAddress": obj.get("emailAddress"),
+ "phoneNumber": obj.get("phoneNumber"),
+ "externalNetwork": obj.get("externalNetwork"),
+ "symphonyId": obj.get("symphonyId"),
+ "advisors": obj.get("advisors")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/update_contacts_response_v2.py b/symphony/bdk/gen/federation_model/update_contacts_response_v2.py
new file mode 100644
index 00000000..26565988
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/update_contacts_response_v2.py
@@ -0,0 +1,101 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, Field, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class UpdateContactsResponseV2(BaseModel):
+ """
+ UpdateContactsResponseV2
+ """ # noqa: E501
+ first_name: Optional[StrictStr] = Field(default=None, alias="firstName")
+ last_name: Optional[StrictStr] = Field(default=None, alias="lastName")
+ company_name: Optional[StrictStr] = Field(default=None, alias="companyName")
+ email_address: Optional[StrictStr] = Field(default=None, alias="emailAddress")
+ phone_number: Optional[StrictStr] = Field(default=None, alias="phoneNumber")
+ symphony_id: Optional[StrictStr] = Field(default=None, description="Federated user Symphony id", alias="symphonyId")
+ advisors: Optional[List[StrictStr]] = Field(default=None, description="Advisors Symphony IDs")
+ preferred_language: Optional[StrictStr] = Field(default=None, description="Contact preferred language", alias="preferredLanguage")
+ __properties: ClassVar[List[str]] = ["firstName", "lastName", "companyName", "emailAddress", "phoneNumber", "symphonyId", "advisors", "preferredLanguage"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of UpdateContactsResponseV2 from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of UpdateContactsResponseV2 from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "firstName": obj.get("firstName"),
+ "lastName": obj.get("lastName"),
+ "companyName": obj.get("companyName"),
+ "emailAddress": obj.get("emailAddress"),
+ "phoneNumber": obj.get("phoneNumber"),
+ "symphonyId": obj.get("symphonyId"),
+ "advisors": obj.get("advisors"),
+ "preferredLanguage": obj.get("preferredLanguage")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/update_contactsv2403_response.py b/symphony/bdk/gen/federation_model/update_contactsv2403_response.py
new file mode 100644
index 00000000..98b9c290
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/update_contactsv2403_response.py
@@ -0,0 +1,151 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import json
+import pprint
+from pydantic import BaseModel, ConfigDict, Field, StrictStr, ValidationError, field_validator
+from typing import Any, List, Optional
+from symphony.bdk.gen.federation_model.cannot_edit_advisor_own_contact_email import CannotEditAdvisorOwnContactEmail
+from symphony.bdk.gen.federation_model.forbidden import Forbidden
+from symphony.bdk.gen.federation_model.inline_response4031 import InlineResponse4031
+from pydantic import StrictStr, Field
+from typing import Union, List, Set, Optional, Dict
+from typing_extensions import Literal, Self
+
+UPDATECONTACTSV2403RESPONSE_ONE_OF_SCHEMAS = ["CannotEditAdvisorOwnContactEmail", "Forbidden", "InlineResponse4031"]
+
+class UpdateContactsv2403Response(BaseModel):
+ """
+ UpdateContactsv2403Response
+ """
+ # data type: InlineResponse4031
+ oneof_schema_1_validator: Optional[InlineResponse4031] = None
+ # data type: Forbidden
+ oneof_schema_2_validator: Optional[Forbidden] = None
+ # data type: CannotEditAdvisorOwnContactEmail
+ oneof_schema_3_validator: Optional[CannotEditAdvisorOwnContactEmail] = None
+ actual_instance: Optional[Union[CannotEditAdvisorOwnContactEmail, Forbidden, InlineResponse4031]] = None
+ one_of_schemas: Set[str] = { "CannotEditAdvisorOwnContactEmail", "Forbidden", "InlineResponse4031" }
+
+ model_config = ConfigDict(
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def __init__(self, *args, **kwargs) -> None:
+ if args:
+ if len(args) > 1:
+ raise ValueError("If a position argument is used, only 1 is allowed to set `actual_instance`")
+ if kwargs:
+ raise ValueError("If a position argument is used, keyword arguments cannot be used.")
+ super().__init__(actual_instance=args[0])
+ else:
+ super().__init__(**kwargs)
+
+ @field_validator('actual_instance')
+ def actual_instance_must_validate_oneof(cls, v):
+ instance = UpdateContactsv2403Response.model_construct()
+ error_messages = []
+ match = 0
+ # validate data type: InlineResponse4031
+ if not isinstance(v, InlineResponse4031):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `InlineResponse4031`")
+ else:
+ match += 1
+ # validate data type: Forbidden
+ if not isinstance(v, Forbidden):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `Forbidden`")
+ else:
+ match += 1
+ # validate data type: CannotEditAdvisorOwnContactEmail
+ if not isinstance(v, CannotEditAdvisorOwnContactEmail):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `CannotEditAdvisorOwnContactEmail`")
+ else:
+ match += 1
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when setting `actual_instance` in UpdateContactsv2403Response with oneOf schemas: CannotEditAdvisorOwnContactEmail, Forbidden, InlineResponse4031. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when setting `actual_instance` in UpdateContactsv2403Response with oneOf schemas: CannotEditAdvisorOwnContactEmail, Forbidden, InlineResponse4031. Details: " + ", ".join(error_messages))
+ else:
+ return v
+
+ @classmethod
+ def from_dict(cls, obj: Union[str, Dict[str, Any]]) -> Self:
+ return cls.from_json(json.dumps(obj))
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Self:
+ """Returns the object represented by the json string"""
+ instance = cls.model_construct()
+ error_messages = []
+ match = 0
+
+ # deserialize data into InlineResponse4031
+ try:
+ instance.actual_instance = InlineResponse4031.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+ # deserialize data into Forbidden
+ try:
+ instance.actual_instance = Forbidden.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+ # deserialize data into CannotEditAdvisorOwnContactEmail
+ try:
+ instance.actual_instance = CannotEditAdvisorOwnContactEmail.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when deserializing the JSON string into UpdateContactsv2403Response with oneOf schemas: CannotEditAdvisorOwnContactEmail, Forbidden, InlineResponse4031. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when deserializing the JSON string into UpdateContactsv2403Response with oneOf schemas: CannotEditAdvisorOwnContactEmail, Forbidden, InlineResponse4031. Details: " + ", ".join(error_messages))
+ else:
+ return instance
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the actual instance"""
+ if self.actual_instance is None:
+ return "null"
+
+ if hasattr(self.actual_instance, "to_json") and callable(self.actual_instance.to_json):
+ return self.actual_instance.to_json()
+ else:
+ return json.dumps(self.actual_instance)
+
+ def to_dict(self) -> Optional[Union[Dict[str, Any], CannotEditAdvisorOwnContactEmail, Forbidden, InlineResponse4031]]:
+ """Returns the dict representation of the actual instance"""
+ if self.actual_instance is None:
+ return None
+
+ if hasattr(self.actual_instance, "to_dict") and callable(self.actual_instance.to_dict):
+ return self.actual_instance.to_dict()
+ else:
+ # primitive type
+ return self.actual_instance
+
+ def to_str(self) -> str:
+ """Returns the string representation of the actual instance"""
+ return pprint.pformat(self.model_dump())
+
+
diff --git a/symphony/bdk/gen/federation_model/update_federation_group_request.py b/symphony/bdk/gen/federation_model/update_federation_group_request.py
new file mode 100644
index 00000000..40798359
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/update_federation_group_request.py
@@ -0,0 +1,89 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class UpdateFederationGroupRequest(BaseModel):
+ """
+ UpdateFederationGroupRequest
+ """ # noqa: E501
+ federation_group_id: StrictStr = Field(alias="federationGroupId")
+ move_to_default: Optional[StrictBool] = Field(default=None, alias="moveToDefault")
+ __properties: ClassVar[List[str]] = ["federationGroupId", "moveToDefault"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of UpdateFederationGroupRequest from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of UpdateFederationGroupRequest from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "federationGroupId": obj.get("federationGroupId"),
+ "moveToDefault": obj.get("moveToDefault")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/update_federation_group_response.py b/symphony/bdk/gen/federation_model/update_federation_group_response.py
new file mode 100644
index 00000000..533850ab
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/update_federation_group_response.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, Field, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class UpdateFederationGroupResponse(BaseModel):
+ """
+ UpdateFederationGroupResponse
+ """ # noqa: E501
+ symphony_id: Optional[StrictStr] = Field(default=None, alias="symphonyId")
+ federation_group_id: Optional[StrictStr] = Field(default=None, alias="federationGroupId")
+ external_network: Optional[StrictStr] = Field(default=None, alias="externalNetwork")
+ __properties: ClassVar[List[str]] = ["symphonyId", "federationGroupId", "externalNetwork"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of UpdateFederationGroupResponse from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of UpdateFederationGroupResponse from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "symphonyId": obj.get("symphonyId"),
+ "federationGroupId": obj.get("federationGroupId"),
+ "externalNetwork": obj.get("externalNetwork")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/update_forbidden_for_advisor.py b/symphony/bdk/gen/federation_model/update_forbidden_for_advisor.py
new file mode 100644
index 00000000..5669e2bc
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/update_forbidden_for_advisor.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class UpdateForbiddenForAdvisor(BaseModel):
+ """
+ Contacts update is forbidden for this Advisor.
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of UpdateForbiddenForAdvisor from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of UpdateForbiddenForAdvisor from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/update_forbidden_for_contact.py b/symphony/bdk/gen/federation_model/update_forbidden_for_contact.py
new file mode 100644
index 00000000..dc1969ba
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/update_forbidden_for_contact.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class UpdateForbiddenForContact(BaseModel):
+ """
+ Update forbidden for this contact.
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of UpdateForbiddenForContact from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of UpdateForbiddenForContact from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/update_number_request.py b/symphony/bdk/gen/federation_model/update_number_request.py
new file mode 100644
index 00000000..d70866fe
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/update_number_request.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, Field
+from typing import Any, ClassVar, Dict, List, Optional
+from symphony.bdk.gen.federation_model.assigned_to_request import AssignedToRequest
+from typing import Optional, Set
+from typing_extensions import Self
+
+class UpdateNumberRequest(BaseModel):
+ """
+ UpdateNumberRequest
+ """ # noqa: E501
+ assigned_to: Optional[AssignedToRequest] = Field(default=None, alias="assignedTo")
+ __properties: ClassVar[List[str]] = ["assignedTo"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of UpdateNumberRequest from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ # override the default output from pydantic by calling `to_dict()` of assigned_to
+ if self.assigned_to:
+ _dict['assignedTo'] = self.assigned_to.to_dict()
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of UpdateNumberRequest from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "assignedTo": AssignedToRequest.from_dict(obj["assignedTo"]) if obj.get("assignedTo") is not None else None
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/update_phone_number403_response.py b/symphony/bdk/gen/federation_model/update_phone_number403_response.py
new file mode 100644
index 00000000..6293bd7f
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/update_phone_number403_response.py
@@ -0,0 +1,137 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import json
+import pprint
+from pydantic import BaseModel, ConfigDict, Field, StrictStr, ValidationError, field_validator
+from typing import Any, List, Optional
+from symphony.bdk.gen.federation_model.advisor_already_entitled_for_direct_emp import AdvisorAlreadyEntitledForDirectEmp
+from symphony.bdk.gen.federation_model.advisor_still_entitled import AdvisorStillEntitled
+from pydantic import StrictStr, Field
+from typing import Union, List, Set, Optional, Dict
+from typing_extensions import Literal, Self
+
+UPDATEPHONENUMBER403RESPONSE_ONE_OF_SCHEMAS = ["AdvisorAlreadyEntitledForDirectEmp", "AdvisorStillEntitled"]
+
+class UpdatePhoneNumber403Response(BaseModel):
+ """
+ UpdatePhoneNumber403Response
+ """
+ # data type: AdvisorStillEntitled
+ oneof_schema_1_validator: Optional[AdvisorStillEntitled] = None
+ # data type: AdvisorAlreadyEntitledForDirectEmp
+ oneof_schema_2_validator: Optional[AdvisorAlreadyEntitledForDirectEmp] = None
+ actual_instance: Optional[Union[AdvisorAlreadyEntitledForDirectEmp, AdvisorStillEntitled]] = None
+ one_of_schemas: Set[str] = { "AdvisorAlreadyEntitledForDirectEmp", "AdvisorStillEntitled" }
+
+ model_config = ConfigDict(
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def __init__(self, *args, **kwargs) -> None:
+ if args:
+ if len(args) > 1:
+ raise ValueError("If a position argument is used, only 1 is allowed to set `actual_instance`")
+ if kwargs:
+ raise ValueError("If a position argument is used, keyword arguments cannot be used.")
+ super().__init__(actual_instance=args[0])
+ else:
+ super().__init__(**kwargs)
+
+ @field_validator('actual_instance')
+ def actual_instance_must_validate_oneof(cls, v):
+ instance = UpdatePhoneNumber403Response.model_construct()
+ error_messages = []
+ match = 0
+ # validate data type: AdvisorStillEntitled
+ if not isinstance(v, AdvisorStillEntitled):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `AdvisorStillEntitled`")
+ else:
+ match += 1
+ # validate data type: AdvisorAlreadyEntitledForDirectEmp
+ if not isinstance(v, AdvisorAlreadyEntitledForDirectEmp):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `AdvisorAlreadyEntitledForDirectEmp`")
+ else:
+ match += 1
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when setting `actual_instance` in UpdatePhoneNumber403Response with oneOf schemas: AdvisorAlreadyEntitledForDirectEmp, AdvisorStillEntitled. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when setting `actual_instance` in UpdatePhoneNumber403Response with oneOf schemas: AdvisorAlreadyEntitledForDirectEmp, AdvisorStillEntitled. Details: " + ", ".join(error_messages))
+ else:
+ return v
+
+ @classmethod
+ def from_dict(cls, obj: Union[str, Dict[str, Any]]) -> Self:
+ return cls.from_json(json.dumps(obj))
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Self:
+ """Returns the object represented by the json string"""
+ instance = cls.model_construct()
+ error_messages = []
+ match = 0
+
+ # deserialize data into AdvisorStillEntitled
+ try:
+ instance.actual_instance = AdvisorStillEntitled.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+ # deserialize data into AdvisorAlreadyEntitledForDirectEmp
+ try:
+ instance.actual_instance = AdvisorAlreadyEntitledForDirectEmp.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when deserializing the JSON string into UpdatePhoneNumber403Response with oneOf schemas: AdvisorAlreadyEntitledForDirectEmp, AdvisorStillEntitled. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when deserializing the JSON string into UpdatePhoneNumber403Response with oneOf schemas: AdvisorAlreadyEntitledForDirectEmp, AdvisorStillEntitled. Details: " + ", ".join(error_messages))
+ else:
+ return instance
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the actual instance"""
+ if self.actual_instance is None:
+ return "null"
+
+ if hasattr(self.actual_instance, "to_json") and callable(self.actual_instance.to_json):
+ return self.actual_instance.to_json()
+ else:
+ return json.dumps(self.actual_instance)
+
+ def to_dict(self) -> Optional[Union[Dict[str, Any], AdvisorAlreadyEntitledForDirectEmp, AdvisorStillEntitled]]:
+ """Returns the dict representation of the actual instance"""
+ if self.actual_instance is None:
+ return None
+
+ if hasattr(self.actual_instance, "to_dict") and callable(self.actual_instance.to_dict):
+ return self.actual_instance.to_dict()
+ else:
+ # primitive type
+ return self.actual_instance
+
+ def to_str(self) -> str:
+ """Returns the string representation of the actual instance"""
+ return pprint.pformat(self.model_dump())
+
+
diff --git a/symphony/bdk/gen/federation_model/update_room_federation_groups400_response.py b/symphony/bdk/gen/federation_model/update_room_federation_groups400_response.py
new file mode 100644
index 00000000..252bd536
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/update_room_federation_groups400_response.py
@@ -0,0 +1,137 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import json
+import pprint
+from pydantic import BaseModel, ConfigDict, Field, StrictStr, ValidationError, field_validator
+from typing import Any, List, Optional
+from symphony.bdk.gen.federation_model.missing_destination_federation_group import MissingDestinationFederationGroup
+from symphony.bdk.gen.federation_model.multiple_destination_federation_group import MultipleDestinationFederationGroup
+from pydantic import StrictStr, Field
+from typing import Union, List, Set, Optional, Dict
+from typing_extensions import Literal, Self
+
+UPDATEROOMFEDERATIONGROUPS400RESPONSE_ONE_OF_SCHEMAS = ["MissingDestinationFederationGroup", "MultipleDestinationFederationGroup"]
+
+class UpdateRoomFederationGroups400Response(BaseModel):
+ """
+ UpdateRoomFederationGroups400Response
+ """
+ # data type: MissingDestinationFederationGroup
+ oneof_schema_1_validator: Optional[MissingDestinationFederationGroup] = None
+ # data type: MultipleDestinationFederationGroup
+ oneof_schema_2_validator: Optional[MultipleDestinationFederationGroup] = None
+ actual_instance: Optional[Union[MissingDestinationFederationGroup, MultipleDestinationFederationGroup]] = None
+ one_of_schemas: Set[str] = { "MissingDestinationFederationGroup", "MultipleDestinationFederationGroup" }
+
+ model_config = ConfigDict(
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def __init__(self, *args, **kwargs) -> None:
+ if args:
+ if len(args) > 1:
+ raise ValueError("If a position argument is used, only 1 is allowed to set `actual_instance`")
+ if kwargs:
+ raise ValueError("If a position argument is used, keyword arguments cannot be used.")
+ super().__init__(actual_instance=args[0])
+ else:
+ super().__init__(**kwargs)
+
+ @field_validator('actual_instance')
+ def actual_instance_must_validate_oneof(cls, v):
+ instance = UpdateRoomFederationGroups400Response.model_construct()
+ error_messages = []
+ match = 0
+ # validate data type: MissingDestinationFederationGroup
+ if not isinstance(v, MissingDestinationFederationGroup):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `MissingDestinationFederationGroup`")
+ else:
+ match += 1
+ # validate data type: MultipleDestinationFederationGroup
+ if not isinstance(v, MultipleDestinationFederationGroup):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `MultipleDestinationFederationGroup`")
+ else:
+ match += 1
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when setting `actual_instance` in UpdateRoomFederationGroups400Response with oneOf schemas: MissingDestinationFederationGroup, MultipleDestinationFederationGroup. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when setting `actual_instance` in UpdateRoomFederationGroups400Response with oneOf schemas: MissingDestinationFederationGroup, MultipleDestinationFederationGroup. Details: " + ", ".join(error_messages))
+ else:
+ return v
+
+ @classmethod
+ def from_dict(cls, obj: Union[str, Dict[str, Any]]) -> Self:
+ return cls.from_json(json.dumps(obj))
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Self:
+ """Returns the object represented by the json string"""
+ instance = cls.model_construct()
+ error_messages = []
+ match = 0
+
+ # deserialize data into MissingDestinationFederationGroup
+ try:
+ instance.actual_instance = MissingDestinationFederationGroup.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+ # deserialize data into MultipleDestinationFederationGroup
+ try:
+ instance.actual_instance = MultipleDestinationFederationGroup.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when deserializing the JSON string into UpdateRoomFederationGroups400Response with oneOf schemas: MissingDestinationFederationGroup, MultipleDestinationFederationGroup. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when deserializing the JSON string into UpdateRoomFederationGroups400Response with oneOf schemas: MissingDestinationFederationGroup, MultipleDestinationFederationGroup. Details: " + ", ".join(error_messages))
+ else:
+ return instance
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the actual instance"""
+ if self.actual_instance is None:
+ return "null"
+
+ if hasattr(self.actual_instance, "to_json") and callable(self.actual_instance.to_json):
+ return self.actual_instance.to_json()
+ else:
+ return json.dumps(self.actual_instance)
+
+ def to_dict(self) -> Optional[Union[Dict[str, Any], MissingDestinationFederationGroup, MultipleDestinationFederationGroup]]:
+ """Returns the dict representation of the actual instance"""
+ if self.actual_instance is None:
+ return None
+
+ if hasattr(self.actual_instance, "to_dict") and callable(self.actual_instance.to_dict):
+ return self.actual_instance.to_dict()
+ else:
+ # primitive type
+ return self.actual_instance
+
+ def to_str(self) -> str:
+ """Returns the string representation of the actual instance"""
+ return pprint.pformat(self.model_dump())
+
+
diff --git a/symphony/bdk/gen/federation_model/update_room_federation_groups404_response.py b/symphony/bdk/gen/federation_model/update_room_federation_groups404_response.py
new file mode 100644
index 00000000..8aee6c39
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/update_room_federation_groups404_response.py
@@ -0,0 +1,137 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import json
+import pprint
+from pydantic import BaseModel, ConfigDict, Field, StrictStr, ValidationError, field_validator
+from typing import Any, List, Optional
+from symphony.bdk.gen.federation_model.federation_group_not_found import FederationGroupNotFound
+from symphony.bdk.gen.federation_model.room_not_found import RoomNotFound
+from pydantic import StrictStr, Field
+from typing import Union, List, Set, Optional, Dict
+from typing_extensions import Literal, Self
+
+UPDATEROOMFEDERATIONGROUPS404RESPONSE_ONE_OF_SCHEMAS = ["FederationGroupNotFound", "RoomNotFound"]
+
+class UpdateRoomFederationGroups404Response(BaseModel):
+ """
+ UpdateRoomFederationGroups404Response
+ """
+ # data type: RoomNotFound
+ oneof_schema_1_validator: Optional[RoomNotFound] = None
+ # data type: FederationGroupNotFound
+ oneof_schema_2_validator: Optional[FederationGroupNotFound] = None
+ actual_instance: Optional[Union[FederationGroupNotFound, RoomNotFound]] = None
+ one_of_schemas: Set[str] = { "FederationGroupNotFound", "RoomNotFound" }
+
+ model_config = ConfigDict(
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def __init__(self, *args, **kwargs) -> None:
+ if args:
+ if len(args) > 1:
+ raise ValueError("If a position argument is used, only 1 is allowed to set `actual_instance`")
+ if kwargs:
+ raise ValueError("If a position argument is used, keyword arguments cannot be used.")
+ super().__init__(actual_instance=args[0])
+ else:
+ super().__init__(**kwargs)
+
+ @field_validator('actual_instance')
+ def actual_instance_must_validate_oneof(cls, v):
+ instance = UpdateRoomFederationGroups404Response.model_construct()
+ error_messages = []
+ match = 0
+ # validate data type: RoomNotFound
+ if not isinstance(v, RoomNotFound):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `RoomNotFound`")
+ else:
+ match += 1
+ # validate data type: FederationGroupNotFound
+ if not isinstance(v, FederationGroupNotFound):
+ error_messages.append(f"Error! Input type `{type(v)}` is not `FederationGroupNotFound`")
+ else:
+ match += 1
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when setting `actual_instance` in UpdateRoomFederationGroups404Response with oneOf schemas: FederationGroupNotFound, RoomNotFound. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when setting `actual_instance` in UpdateRoomFederationGroups404Response with oneOf schemas: FederationGroupNotFound, RoomNotFound. Details: " + ", ".join(error_messages))
+ else:
+ return v
+
+ @classmethod
+ def from_dict(cls, obj: Union[str, Dict[str, Any]]) -> Self:
+ return cls.from_json(json.dumps(obj))
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Self:
+ """Returns the object represented by the json string"""
+ instance = cls.model_construct()
+ error_messages = []
+ match = 0
+
+ # deserialize data into RoomNotFound
+ try:
+ instance.actual_instance = RoomNotFound.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+ # deserialize data into FederationGroupNotFound
+ try:
+ instance.actual_instance = FederationGroupNotFound.from_json(json_str)
+ match += 1
+ except (ValidationError, ValueError) as e:
+ error_messages.append(str(e))
+
+ if match > 1:
+ # more than 1 match
+ raise ValueError("Multiple matches found when deserializing the JSON string into UpdateRoomFederationGroups404Response with oneOf schemas: FederationGroupNotFound, RoomNotFound. Details: " + ", ".join(error_messages))
+ elif match == 0:
+ # no match
+ raise ValueError("No match found when deserializing the JSON string into UpdateRoomFederationGroups404Response with oneOf schemas: FederationGroupNotFound, RoomNotFound. Details: " + ", ".join(error_messages))
+ else:
+ return instance
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the actual instance"""
+ if self.actual_instance is None:
+ return "null"
+
+ if hasattr(self.actual_instance, "to_json") and callable(self.actual_instance.to_json):
+ return self.actual_instance.to_json()
+ else:
+ return json.dumps(self.actual_instance)
+
+ def to_dict(self) -> Optional[Union[Dict[str, Any], FederationGroupNotFound, RoomNotFound]]:
+ """Returns the dict representation of the actual instance"""
+ if self.actual_instance is None:
+ return None
+
+ if hasattr(self.actual_instance, "to_dict") and callable(self.actual_instance.to_dict):
+ return self.actual_instance.to_dict()
+ else:
+ # primitive type
+ return self.actual_instance
+
+ def to_str(self) -> str:
+ """Returns the string representation of the actual instance"""
+ return pprint.pformat(self.model_dump())
+
+
diff --git a/symphony/bdk/gen/federation_model/update_room_status_failed.py b/symphony/bdk/gen/federation_model/update_room_status_failed.py
new file mode 100644
index 00000000..2f560d51
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/update_room_status_failed.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class UpdateRoomStatusFailed(BaseModel):
+ """
+ Gateway microservice cannot update the status of the room.
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of UpdateRoomStatusFailed from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of UpdateRoomStatusFailed from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/user_already_exists.py b/symphony/bdk/gen/federation_model/user_already_exists.py
new file mode 100644
index 00000000..4ecd0d57
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/user_already_exists.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class UserAlreadyExists(BaseModel):
+ """
+ Contact already exists.
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of UserAlreadyExists from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of UserAlreadyExists from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/user_already_onboarded.py b/symphony/bdk/gen/federation_model/user_already_onboarded.py
new file mode 100644
index 00000000..31d4118f
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/user_already_onboarded.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class UserAlreadyOnboarded(BaseModel):
+ """
+ Contact already onboarded.
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of UserAlreadyOnboarded from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of UserAlreadyOnboarded from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/user_copy_not_supported_for_ims.py b/symphony/bdk/gen/federation_model/user_copy_not_supported_for_ims.py
new file mode 100644
index 00000000..4789d398
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/user_copy_not_supported_for_ims.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class UserCopyNotSupportedForIms(BaseModel):
+ """
+ Contact copy is not supported for users who are part of IMs. These IMs need to be removed first.
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of UserCopyNotSupportedForIms from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of UserCopyNotSupportedForIms from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/user_copy_not_supported_for_network.py b/symphony/bdk/gen/federation_model/user_copy_not_supported_for_network.py
new file mode 100644
index 00000000..80dd4688
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/user_copy_not_supported_for_network.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class UserCopyNotSupportedForNetwork(BaseModel):
+ """
+ Contact copy is not supported for the external network of the contact. Contact copy is supported only for WHATSAPP and SMS.
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of UserCopyNotSupportedForNetwork from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of UserCopyNotSupportedForNetwork from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/federation_model/user_id_mismatch.py b/symphony/bdk/gen/federation_model/user_id_mismatch.py
new file mode 100644
index 00000000..23876919
--- /dev/null
+++ b/symphony/bdk/gen/federation_model/user_id_mismatch.py
@@ -0,0 +1,91 @@
+# coding: utf-8
+
+"""
+ SFS MS Admin API
+
+ see https://symphony-1.gitbook.io/federation/
+
+ The version of the OpenAPI document: 0.0.1
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
+
+ Do not edit the class manually.
+""" # noqa: E501
+
+
+from __future__ import annotations
+import pprint
+import re # noqa: F401
+import json
+
+from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
+from typing import Any, ClassVar, Dict, List, Optional
+from typing import Optional, Set
+from typing_extensions import Self
+
+class UserIdMismatch(BaseModel):
+ """
+ The token userId does not match the request.
+ """ # noqa: E501
+ type: Optional[StrictStr] = None
+ title: Optional[StrictStr] = None
+ status: Optional[StrictInt] = None
+ __properties: ClassVar[List[str]] = ["type", "title", "status"]
+
+ model_config = ConfigDict(
+ populate_by_name=True,
+ validate_assignment=True,
+ protected_namespaces=(),
+ )
+
+
+ def to_str(self) -> str:
+ """Returns the string representation of the model using alias"""
+ return pprint.pformat(self.model_dump(by_alias=True))
+
+ def to_json(self) -> str:
+ """Returns the JSON representation of the model using alias"""
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
+ return json.dumps(self.to_dict())
+
+ @classmethod
+ def from_json(cls, json_str: str) -> Optional[Self]:
+ """Create an instance of UserIdMismatch from a JSON string"""
+ return cls.from_dict(json.loads(json_str))
+
+ def to_dict(self) -> Dict[str, Any]:
+ """Return the dictionary representation of the model using alias.
+
+ This has the following differences from calling pydantic's
+ `self.model_dump(by_alias=True)`:
+
+ * `None` is only added to the output dict for nullable fields that
+ were set at model initialization. Other fields with value `None`
+ are ignored.
+ """
+ excluded_fields: Set[str] = set([
+ ])
+
+ _dict = self.model_dump(
+ by_alias=True,
+ exclude=excluded_fields,
+ exclude_none=True,
+ )
+ return _dict
+
+ @classmethod
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
+ """Create an instance of UserIdMismatch from a dict"""
+ if obj is None:
+ return None
+
+ if not isinstance(obj, dict):
+ return cls.model_validate(obj)
+
+ _obj = cls.model_validate({
+ "type": obj.get("type"),
+ "title": obj.get("title"),
+ "status": obj.get("status")
+ })
+ return _obj
+
+
diff --git a/symphony/bdk/gen/models/__init__.py b/symphony/bdk/gen/models/__init__.py
index 61d75234..670daa7c 100644
--- a/symphony/bdk/gen/models/__init__.py
+++ b/symphony/bdk/gen/models/__init__.py
@@ -316,3 +316,271 @@
from symphony.bdk.gen.group_model.update_group import UpdateGroup
from symphony.bdk.gen.group_model.upload_avatar import UploadAvatar
from symphony.bdk.gen.group_model.visibility_restriction import VisibilityRestriction
+from symphony.bdk.gen.federation_model.add_contact403_response import AddContact403Response
+from symphony.bdk.gen.federation_model.add_contact_response import AddContactResponse
+from symphony.bdk.gen.federation_model.add_entitlement400_response import AddEntitlement400Response
+from symphony.bdk.gen.federation_model.add_entitlement409_response import AddEntitlement409Response
+from symphony.bdk.gen.federation_model.add_entitlementv2_response import AddEntitlementv2Response
+from symphony.bdk.gen.federation_model.add_pre_entitlement400_response import AddPreEntitlement400Response
+from symphony.bdk.gen.federation_model.add_pre_entitlement409_response import AddPreEntitlement409Response
+from symphony.bdk.gen.federation_model.add_room_member_conflicted import AddRoomMemberConflicted
+from symphony.bdk.gen.federation_model.add_room_member_failed import AddRoomMemberFailed
+from symphony.bdk.gen.federation_model.add_room_member_multi_roomv2403_response import AddRoomMemberMultiRoomv2403Response
+from symphony.bdk.gen.federation_model.add_room_member_multi_roomv2409_response import AddRoomMemberMultiRoomv2409Response
+from symphony.bdk.gen.federation_model.address_already_empty import AddressAlreadyEmpty
+from symphony.bdk.gen.federation_model.address_request import AddressRequest
+from symphony.bdk.gen.federation_model.address_response import AddressResponse
+from symphony.bdk.gen.federation_model.advisor_already_entitled import AdvisorAlreadyEntitled
+from symphony.bdk.gen.federation_model.advisor_already_entitled_for_direct_emp import AdvisorAlreadyEntitledForDirectEmp
+from symphony.bdk.gen.federation_model.advisor_already_has_phone_allocated_problem import AdvisorAlreadyHasPhoneAllocatedProblem
+from symphony.bdk.gen.federation_model.advisor_contact_rooms_response import AdvisorContactRoomsResponse
+from symphony.bdk.gen.federation_model.advisor_id_not_provided import AdvisorIdNotProvided
+from symphony.bdk.gen.federation_model.advisor_not_found import AdvisorNotFound
+from symphony.bdk.gen.federation_model.advisor_permission_request import AdvisorPermissionRequest
+from symphony.bdk.gen.federation_model.advisor_permission_response import AdvisorPermissionResponse
+from symphony.bdk.gen.federation_model.advisor_permissions_response import AdvisorPermissionsResponse
+from symphony.bdk.gen.federation_model.advisor_phone_number_already_used_problem import AdvisorPhoneNumberAlreadyUsedProblem
+from symphony.bdk.gen.federation_model.advisor_phone_number_is_required_problem import AdvisorPhoneNumberIsRequiredProblem
+from symphony.bdk.gen.federation_model.advisor_phone_number_not_supported_problem import AdvisorPhoneNumberNotSupportedProblem
+from symphony.bdk.gen.federation_model.advisor_still_entitled import AdvisorStillEntitled
+from symphony.bdk.gen.federation_model.advisors_permission_request import AdvisorsPermissionRequest
+from symphony.bdk.gen.federation_model.advisors_permission_requestv2 import AdvisorsPermissionRequestv2
+from symphony.bdk.gen.federation_model.advisors_search_response import AdvisorsSearchResponse
+from symphony.bdk.gen.federation_model.already_room_owner import AlreadyRoomOwner
+from symphony.bdk.gen.federation_model.assigned_to import AssignedTo
+from symphony.bdk.gen.federation_model.assigned_to_request import AssignedToRequest
+from symphony.bdk.gen.federation_model.block_contact_information import BlockContactInformation
+from symphony.bdk.gen.federation_model.blocked_by_item import BlockedByItem
+from symphony.bdk.gen.federation_model.blocking_reason_enum import BlockingReasonEnum
+from symphony.bdk.gen.federation_model.bulk_advisor_permission_item_response import BulkAdvisorPermissionItemResponse
+from symphony.bdk.gen.federation_model.bulk_advisor_permission_response import BulkAdvisorPermissionResponse
+from symphony.bdk.gen.federation_model.bulk_item_error import BulkItemError
+from symphony.bdk.gen.federation_model.bulk_item_error_parameters import BulkItemErrorParameters
+from symphony.bdk.gen.federation_model.bulk_permission_item import BulkPermissionItem
+from symphony.bdk.gen.federation_model.bulk_removal_status import BulkRemovalStatus
+from symphony.bdk.gen.federation_model.bulk_removal_statusv2 import BulkRemovalStatusv2
+from symphony.bdk.gen.federation_model.bulk_room_member_item_response import BulkRoomMemberItemResponse
+from symphony.bdk.gen.federation_model.bulk_room_member_item_responsev2 import BulkRoomMemberItemResponsev2
+from symphony.bdk.gen.federation_model.bulk_room_member_multi_room_request import BulkRoomMemberMultiRoomRequest
+from symphony.bdk.gen.federation_model.bulk_room_member_multi_room_requestv2 import BulkRoomMemberMultiRoomRequestv2
+from symphony.bdk.gen.federation_model.bulk_room_member_response import BulkRoomMemberResponse
+from symphony.bdk.gen.federation_model.bulk_room_member_responsev2 import BulkRoomMemberResponsev2
+from symphony.bdk.gen.federation_model.bulk_update_advisors_federation_group404_response import BulkUpdateAdvisorsFederationGroup404Response
+from symphony.bdk.gen.federation_model.bulk_update_federation_group_item_request import BulkUpdateFederationGroupItemRequest
+from symphony.bdk.gen.federation_model.bulk_update_federation_group_item_response import BulkUpdateFederationGroupItemResponse
+from symphony.bdk.gen.federation_model.bulk_update_federation_group_request import BulkUpdateFederationGroupRequest
+from symphony.bdk.gen.federation_model.bulk_update_federation_group_response import BulkUpdateFederationGroupResponse
+from symphony.bdk.gen.federation_model.cannot_edit_advisor_own_contact_email import CannotEditAdvisorOwnContactEmail
+from symphony.bdk.gen.federation_model.cannot_rename_room_duplicate_room_name import CannotRenameRoomDuplicateRoomName
+from symphony.bdk.gen.federation_model.cannot_transfer_room_ownership_duplicate_room_name import CannotTransferRoomOwnershipDuplicateRoomName
+from symphony.bdk.gen.federation_model.companies_search_response import CompaniesSearchResponse
+from symphony.bdk.gen.federation_model.company_not_found import CompanyNotFound
+from symphony.bdk.gen.federation_model.company_response import CompanyResponse
+from symphony.bdk.gen.federation_model.connection_not_accepted import ConnectionNotAccepted
+from symphony.bdk.gen.federation_model.contact_not_found import ContactNotFound
+from symphony.bdk.gen.federation_model.contact_request import ContactRequest
+from symphony.bdk.gen.federation_model.contact_status import ContactStatus
+from symphony.bdk.gen.federation_model.contacts_response import ContactsResponse
+from symphony.bdk.gen.federation_model.copy_contact403_response import CopyContact403Response
+from symphony.bdk.gen.federation_model.copy_contact_failed import CopyContactFailed
+from symphony.bdk.gen.federation_model.copy_contact_response import CopyContactResponse
+from symphony.bdk.gen.federation_model.create_account_failed import CreateAccountFailed
+from symphony.bdk.gen.federation_model.create_room403_response import CreateRoom403Response
+from symphony.bdk.gen.federation_model.create_room_failed import CreateRoomFailed
+from symphony.bdk.gen.federation_model.create_roomv2400_response import CreateRoomv2400Response
+from symphony.bdk.gen.federation_model.create_roomv2403_response import CreateRoomv2403Response
+from symphony.bdk.gen.federation_model.create_roomv2404_response import CreateRoomv2404Response
+from symphony.bdk.gen.federation_model.current_tenant_has_own_user_copy import CurrentTenantHasOwnUserCopy
+from symphony.bdk.gen.federation_model.cursors import Cursors
+from symphony.bdk.gen.federation_model.customer_block_phone_numbers_item_request import CustomerBlockPhoneNumbersItemRequest
+from symphony.bdk.gen.federation_model.customer_block_phone_numbers_item_response import CustomerBlockPhoneNumbersItemResponse
+from symphony.bdk.gen.federation_model.customer_block_phone_numbers_request import CustomerBlockPhoneNumbersRequest
+from symphony.bdk.gen.federation_model.customer_block_phone_numbers_response import CustomerBlockPhoneNumbersResponse
+from symphony.bdk.gen.federation_model.customer_contact_request import CustomerContactRequest
+from symphony.bdk.gen.federation_model.customer_contact_with_id import CustomerContactWithId
+from symphony.bdk.gen.federation_model.customer_contact_with_id_response import CustomerContactWithIdResponse
+from symphony.bdk.gen.federation_model.customer_contact_with_id_responsev2 import CustomerContactWithIdResponsev2
+from symphony.bdk.gen.federation_model.customer_contact_with_idv2 import CustomerContactWithIdv2
+from symphony.bdk.gen.federation_model.customer_contacts_with_id_response import CustomerContactsWithIdResponse
+from symphony.bdk.gen.federation_model.customer_contacts_with_id_responsev2 import CustomerContactsWithIdResponsev2
+from symphony.bdk.gen.federation_model.customer_delete_advisor_contact_contact import CustomerDeleteAdvisorContactContact
+from symphony.bdk.gen.federation_model.customer_delete_advisor_contact_responsev2 import CustomerDeleteAdvisorContactResponsev2
+from symphony.bdk.gen.federation_model.customer_delete_advisor_contacts_responsev2 import CustomerDeleteAdvisorContactsResponsev2
+from symphony.bdk.gen.federation_model.customer_unblock_phone_numbers_request import CustomerUnblockPhoneNumbersRequest
+from symphony.bdk.gen.federation_model.customer_update_contacts_request import CustomerUpdateContactsRequest
+from symphony.bdk.gen.federation_model.customer_update_contacts_requestv2 import CustomerUpdateContactsRequestv2
+from symphony.bdk.gen.federation_model.delete_contact_request import DeleteContactRequest
+from symphony.bdk.gen.federation_model.delete_contact_requestv2 import DeleteContactRequestv2
+from symphony.bdk.gen.federation_model.delete_contact_response import DeleteContactResponse
+from symphony.bdk.gen.federation_model.delete_contact_responsev2 import DeleteContactResponsev2
+from symphony.bdk.gen.federation_model.delete_contacts_request import DeleteContactsRequest
+from symphony.bdk.gen.federation_model.delete_contacts_requestv2 import DeleteContactsRequestv2
+from symphony.bdk.gen.federation_model.delete_contacts_response import DeleteContactsResponse
+from symphony.bdk.gen.federation_model.delete_contacts_responsev2 import DeleteContactsResponsev2
+from symphony.bdk.gen.federation_model.different_room_name_required import DifferentRoomNameRequired
+from symphony.bdk.gen.federation_model.emp_channel_connector import EmpChannelConnector
+from symphony.bdk.gen.federation_model.emp_channel_connector_response import EmpChannelConnectorResponse
+from symphony.bdk.gen.federation_model.enhanced_permission_response import EnhancedPermissionResponse
+from symphony.bdk.gen.federation_model.enhanced_permissions_response import EnhancedPermissionsResponse
+from symphony.bdk.gen.federation_model.entitled_response import EntitledResponse
+from symphony.bdk.gen.federation_model.entitlement_not_found_problem import EntitlementNotFoundProblem
+from symphony.bdk.gen.federation_model.entitlement_request import EntitlementRequest
+from symphony.bdk.gen.federation_model.entitlement_response import EntitlementResponse
+from symphony.bdk.gen.federation_model.entitlement_type_not_found_problem import EntitlementTypeNotFoundProblem
+from symphony.bdk.gen.federation_model.entitlement_user_already_exists_problem import EntitlementUserAlreadyExistsProblem
+from symphony.bdk.gen.federation_model.entitlements_response import EntitlementsResponse
+from symphony.bdk.gen.federation_model.external_network import ExternalNetwork
+from symphony.bdk.gen.federation_model.external_network_not_found import ExternalNetworkNotFound
+from symphony.bdk.gen.federation_model.federated_account_not_found import FederatedAccountNotFound
+from symphony.bdk.gen.federation_model.federation_group_emp_forbidden import FederationGroupEmpForbidden
+from symphony.bdk.gen.federation_model.federation_group_not_found import FederationGroupNotFound
+from symphony.bdk.gen.federation_model.find_contact_response import FindContactResponse
+from symphony.bdk.gen.federation_model.find_contact_response_v2 import FindContactResponseV2
+from symphony.bdk.gen.federation_model.find_contact_response_v2_with_block_status import FindContactResponseV2WithBlockStatus
+from symphony.bdk.gen.federation_model.forbidden import Forbidden
+from symphony.bdk.gen.federation_model.forbidden_advisor import ForbiddenAdvisor
+from symphony.bdk.gen.federation_model.forbidden_entitlement_type import ForbiddenEntitlementType
+from symphony.bdk.gen.federation_model.forbidden_onboarder import ForbiddenOnboarder
+from symphony.bdk.gen.federation_model.get_advisor_phone_numbers404_response import GetAdvisorPhoneNumbers404Response
+from symphony.bdk.gen.federation_model.get_blocked_phone_numbers_item import GetBlockedPhoneNumbersItem
+from symphony.bdk.gen.federation_model.get_blocked_phone_numbers_response import GetBlockedPhoneNumbersResponse
+from symphony.bdk.gen.federation_model.incompatible_external_network_and_request_body import IncompatibleExternalNetworkAndRequestBody
+from symphony.bdk.gen.federation_model.inline_response400 import InlineResponse400
+from symphony.bdk.gen.federation_model.inline_response4001 import InlineResponse4001
+from symphony.bdk.gen.federation_model.inline_response4003 import InlineResponse4003
+from symphony.bdk.gen.federation_model.inline_response403 import InlineResponse403
+from symphony.bdk.gen.federation_model.inline_response4031 import InlineResponse4031
+from symphony.bdk.gen.federation_model.inline_response4032 import InlineResponse4032
+from symphony.bdk.gen.federation_model.inline_response4033 import InlineResponse4033
+from symphony.bdk.gen.federation_model.inline_response4041 import InlineResponse4041
+from symphony.bdk.gen.federation_model.inline_response4042 import InlineResponse4042
+from symphony.bdk.gen.federation_model.inline_response4043 import InlineResponse4043
+from symphony.bdk.gen.federation_model.inline_response4044 import InlineResponse4044
+from symphony.bdk.gen.federation_model.inline_response4047 import InlineResponse4047
+from symphony.bdk.gen.federation_model.inline_response4048 import InlineResponse4048
+from symphony.bdk.gen.federation_model.inline_response4049 import InlineResponse4049
+from symphony.bdk.gen.federation_model.inline_response409 import InlineResponse409
+from symphony.bdk.gen.federation_model.inline_response500 import InlineResponse500
+from symphony.bdk.gen.federation_model.invalid_page_cursor import InvalidPageCursor
+from symphony.bdk.gen.federation_model.invalid_user_info import InvalidUserInfo
+from symphony.bdk.gen.federation_model.invite_already_confirmed import InviteAlreadyConfirmed
+from symphony.bdk.gen.federation_model.invites_not_configured_on_emp import InvitesNotConfiguredOnEmp
+from symphony.bdk.gen.federation_model.list_available_emp_channel_connectors404_response import ListAvailableEmpChannelConnectors404Response
+from symphony.bdk.gen.federation_model.list_contact_response import ListContactResponse
+from symphony.bdk.gen.federation_model.list_contacts2403_response import ListContacts2403Response
+from symphony.bdk.gen.federation_model.list_contacts2404_response import ListContacts2404Response
+from symphony.bdk.gen.federation_model.list_emp_channel_connector_response import ListEmpChannelConnectorResponse
+from symphony.bdk.gen.federation_model.list_federation_groups_item_response import ListFederationGroupsItemResponse
+from symphony.bdk.gen.federation_model.list_federation_groups_response import ListFederationGroupsResponse
+from symphony.bdk.gen.federation_model.list_roomsv2404_response import ListRoomsv2404Response
+from symphony.bdk.gen.federation_model.member_already_in_room import MemberAlreadyInRoom
+from symphony.bdk.gen.federation_model.missing_connection_with_connect_bot import MissingConnectionWithConnectBot
+from symphony.bdk.gen.federation_model.missing_destination_federation_group import MissingDestinationFederationGroup
+from symphony.bdk.gen.federation_model.multi_company_room_not_supported import MultiCompanyRoomNotSupported
+from symphony.bdk.gen.federation_model.multi_external_network_room_not_supported import MultiExternalNetworkRoomNotSupported
+from symphony.bdk.gen.federation_model.multi_tenant_federated_user_update_attempt import MultiTenantFederatedUserUpdateAttempt
+from symphony.bdk.gen.federation_model.multiple_advisor_permission_response import MultipleAdvisorPermissionResponse
+from symphony.bdk.gen.federation_model.multiple_advisor_permission_response_advisors_permissions_inner import MultipleAdvisorPermissionResponseAdvisorsPermissionsInner
+from symphony.bdk.gen.federation_model.multiple_advisor_permission_response_advisors_permissions_inner_error import MultipleAdvisorPermissionResponseAdvisorsPermissionsInnerError
+from symphony.bdk.gen.federation_model.multiple_advisor_permission_response_advisors_permissions_inner_response import MultipleAdvisorPermissionResponseAdvisorsPermissionsInnerResponse
+from symphony.bdk.gen.federation_model.multiple_advisor_permission_response_advisors_permissions_inner_response_permission import MultipleAdvisorPermissionResponseAdvisorsPermissionsInnerResponsePermission
+from symphony.bdk.gen.federation_model.multiple_destination_federation_group import MultipleDestinationFederationGroup
+from symphony.bdk.gen.federation_model.no_available_number import NoAvailableNumber
+from symphony.bdk.gen.federation_model.no_field_updated import NoFieldUpdated
+from symphony.bdk.gen.federation_model.no_numbers_found import NoNumbersFound
+from symphony.bdk.gen.federation_model.not_a_room_member import NotARoomMember
+from symphony.bdk.gen.federation_model.not_applicable_for_external_network import NotApplicableForExternalNetwork
+from symphony.bdk.gen.federation_model.not_entitled_on_direct_emp import NotEntitledOnDirectEmp
+from symphony.bdk.gen.federation_model.number_not_available import NumberNotAvailable
+from symphony.bdk.gen.federation_model.number_not_found import NumberNotFound
+from symphony.bdk.gen.federation_model.number_registration_not_possible import NumberRegistrationNotPossible
+from symphony.bdk.gen.federation_model.number_response import NumberResponse
+from symphony.bdk.gen.federation_model.pagination import Pagination
+from symphony.bdk.gen.federation_model.permission_already_assigned import PermissionAlreadyAssigned
+from symphony.bdk.gen.federation_model.permission_not_found import PermissionNotFound
+from symphony.bdk.gen.federation_model.permission_response import PermissionResponse
+from symphony.bdk.gen.federation_model.permissions_response import PermissionsResponse
+from symphony.bdk.gen.federation_model.phone import Phone
+from symphony.bdk.gen.federation_model.phone_international_onboarding_forbidden import PhoneInternationalOnboardingForbidden
+from symphony.bdk.gen.federation_model.phone_number_already_allocated_problem import PhoneNumberAlreadyAllocatedProblem
+from symphony.bdk.gen.federation_model.phone_number_info import PhoneNumberInfo
+from symphony.bdk.gen.federation_model.phone_number_not_assigned import PhoneNumberNotAssigned
+from symphony.bdk.gen.federation_model.phone_number_not_found import PhoneNumberNotFound
+from symphony.bdk.gen.federation_model.phone_number_pre_allocation_not_supported_problem import PhoneNumberPreAllocationNotSupportedProblem
+from symphony.bdk.gen.federation_model.phone_numbers_details_response import PhoneNumbersDetailsResponse
+from symphony.bdk.gen.federation_model.pre_entitlement_failed import PreEntitlementFailed
+from symphony.bdk.gen.federation_model.pre_entitlement_not_found import PreEntitlementNotFound
+from symphony.bdk.gen.federation_model.pre_entitlement_permissions_not_supported_problem import PreEntitlementPermissionsNotSupportedProblem
+from symphony.bdk.gen.federation_model.pre_entitlement_phone_number_mismatch import PreEntitlementPhoneNumberMismatch
+from symphony.bdk.gen.federation_model.pre_entitlement_request import PreEntitlementRequest
+from symphony.bdk.gen.federation_model.preferred_language_not_supported import PreferredLanguageNotSupported
+from symphony.bdk.gen.federation_model.reactivate_room_not_implemented import ReactivateRoomNotImplemented
+from symphony.bdk.gen.federation_model.remove_pre_entitlement404_response import RemovePreEntitlement404Response
+from symphony.bdk.gen.federation_model.remove_room_member_forbidden import RemoveRoomMemberForbidden
+from symphony.bdk.gen.federation_model.remove_room_members_response import RemoveRoomMembersResponse
+from symphony.bdk.gen.federation_model.remove_room_memberv2403_response import RemoveRoomMemberv2403Response
+from symphony.bdk.gen.federation_model.rename_room409_response import RenameRoom409Response
+from symphony.bdk.gen.federation_model.rename_room_failed import RenameRoomFailed
+from symphony.bdk.gen.federation_model.rename_room_forbidden import RenameRoomForbidden
+from symphony.bdk.gen.federation_model.rename_room_request import RenameRoomRequest
+from symphony.bdk.gen.federation_model.rename_room_response import RenameRoomResponse
+from symphony.bdk.gen.federation_model.resend_invite400_response import ResendInvite400Response
+from symphony.bdk.gen.federation_model.resend_invite_failed import ResendInviteFailed
+from symphony.bdk.gen.federation_model.resend_invite_response import ResendInviteResponse
+from symphony.bdk.gen.federation_model.rfc_error import RfcError
+from symphony.bdk.gen.federation_model.room_already_exists import RoomAlreadyExists
+from symphony.bdk.gen.federation_model.room_basic_information import RoomBasicInformation
+from symphony.bdk.gen.federation_model.room_creation_response import RoomCreationResponse
+from symphony.bdk.gen.federation_model.room_creation_response_v2 import RoomCreationResponseV2
+from symphony.bdk.gen.federation_model.room_features_request import RoomFeaturesRequest
+from symphony.bdk.gen.federation_model.room_is_deactivated import RoomIsDeactivated
+from symphony.bdk.gen.federation_model.room_member_multi_room_request import RoomMemberMultiRoomRequest
+from symphony.bdk.gen.federation_model.room_member_multi_room_requestv2 import RoomMemberMultiRoomRequestv2
+from symphony.bdk.gen.federation_model.room_member_not_found import RoomMemberNotFound
+from symphony.bdk.gen.federation_model.room_member_request import RoomMemberRequest
+from symphony.bdk.gen.federation_model.room_member_requestv2 import RoomMemberRequestv2
+from symphony.bdk.gen.federation_model.room_member_response import RoomMemberResponse
+from symphony.bdk.gen.federation_model.room_members_response import RoomMembersResponse
+from symphony.bdk.gen.federation_model.room_not_found import RoomNotFound
+from symphony.bdk.gen.federation_model.room_request import RoomRequest
+from symphony.bdk.gen.federation_model.room_requestv2 import RoomRequestv2
+from symphony.bdk.gen.federation_model.room_response import RoomResponse
+from symphony.bdk.gen.federation_model.room_set_activity_request import RoomSetActivityRequest
+from symphony.bdk.gen.federation_model.room_set_activity_response import RoomSetActivityResponse
+from symphony.bdk.gen.federation_model.room_set_federation_group_request import RoomSetFederationGroupRequest
+from symphony.bdk.gen.federation_model.room_update_federation_group_errors import RoomUpdateFederationGroupErrors
+from symphony.bdk.gen.federation_model.room_update_federation_group_errors_errors_inner import RoomUpdateFederationGroupErrorsErrorsInner
+from symphony.bdk.gen.federation_model.rooms_response import RoomsResponse
+from symphony.bdk.gen.federation_model.search_contact_response import SearchContactResponse
+from symphony.bdk.gen.federation_model.search_contacts_response import SearchContactsResponse
+from symphony.bdk.gen.federation_model.subnetwork_not_implemented import SubnetworkNotImplemented
+from symphony.bdk.gen.federation_model.symphony_user_not_found_problem import SymphonyUserNotFoundProblem
+from symphony.bdk.gen.federation_model.tenant_configuration_not_found import TenantConfigurationNotFound
+from symphony.bdk.gen.federation_model.tenant_not_found import TenantNotFound
+from symphony.bdk.gen.federation_model.transfer_room_ownership404_response import TransferRoomOwnership404Response
+from symphony.bdk.gen.federation_model.transfer_room_ownership409_response import TransferRoomOwnership409Response
+from symphony.bdk.gen.federation_model.transfer_room_ownership_request import TransferRoomOwnershipRequest
+from symphony.bdk.gen.federation_model.unauthorized import Unauthorized
+from symphony.bdk.gen.federation_model.update_account_failed import UpdateAccountFailed
+from symphony.bdk.gen.federation_model.update_advisor_federation_group400_response import UpdateAdvisorFederationGroup400Response
+from symphony.bdk.gen.federation_model.update_advisor_federation_group404_response import UpdateAdvisorFederationGroup404Response
+from symphony.bdk.gen.federation_model.update_contact_request import UpdateContactRequest
+from symphony.bdk.gen.federation_model.update_contact_response import UpdateContactResponse
+from symphony.bdk.gen.federation_model.update_contacts_request import UpdateContactsRequest
+from symphony.bdk.gen.federation_model.update_contacts_response import UpdateContactsResponse
+from symphony.bdk.gen.federation_model.update_contacts_response_v2 import UpdateContactsResponseV2
+from symphony.bdk.gen.federation_model.update_contactsv2403_response import UpdateContactsv2403Response
+from symphony.bdk.gen.federation_model.update_federation_group_request import UpdateFederationGroupRequest
+from symphony.bdk.gen.federation_model.update_federation_group_response import UpdateFederationGroupResponse
+from symphony.bdk.gen.federation_model.update_forbidden_for_advisor import UpdateForbiddenForAdvisor
+from symphony.bdk.gen.federation_model.update_forbidden_for_contact import UpdateForbiddenForContact
+from symphony.bdk.gen.federation_model.update_number_request import UpdateNumberRequest
+from symphony.bdk.gen.federation_model.update_phone_number403_response import UpdatePhoneNumber403Response
+from symphony.bdk.gen.federation_model.update_room_federation_groups400_response import UpdateRoomFederationGroups400Response
+from symphony.bdk.gen.federation_model.update_room_federation_groups404_response import UpdateRoomFederationGroups404Response
+from symphony.bdk.gen.federation_model.update_room_status_failed import UpdateRoomStatusFailed
+from symphony.bdk.gen.federation_model.user_already_exists import UserAlreadyExists
+from symphony.bdk.gen.federation_model.user_already_onboarded import UserAlreadyOnboarded
+from symphony.bdk.gen.federation_model.user_copy_not_supported_for_ims import UserCopyNotSupportedForIms
+from symphony.bdk.gen.federation_model.user_copy_not_supported_for_network import UserCopyNotSupportedForNetwork
+from symphony.bdk.gen.federation_model.user_id_mismatch import UserIdMismatch