diff --git a/customer_portal/.gitattributes b/customer_portal/.gitattributes
new file mode 100755
index 000000000..4d75d5900
--- /dev/null
+++ b/customer_portal/.gitattributes
@@ -0,0 +1,2 @@
+# This allows generated code to be indexed correctly
+*.py linguist-generated=false
\ No newline at end of file
diff --git a/customer_portal/.gitignore b/customer_portal/.gitignore
new file mode 100755
index 000000000..8ac3f51d4
--- /dev/null
+++ b/customer_portal/.gitignore
@@ -0,0 +1,7 @@
+.python-version
+.DS_Store
+venv/
+src/*.egg-info/
+__pycache__/
+.pytest_cache/
+.python-version`
diff --git a/customer_portal/README.md b/customer_portal/README.md
index fa610bd9b..7bdce713f 100755
--- a/customer_portal/README.md
+++ b/customer_portal/README.md
@@ -12,80 +12,228 @@ pip install git+https://github.com/epilot-dev/sdk-python.git#subdirectory=custom
```python
import epilot
+import dateutil.parser
from epilot.models import operations, shared
-s = epilot.Epilot()
-
+s = epilot.Epilot(
+ security=shared.Security(
+ epilot_auth="",
+ ),
+)
-req = operations.AddEndCustomerRelationToEntityRequest(
- id="unde",
- slug="contact",
+req = operations.GetEntityActivityFeedRequest(
+ id='5da0a718-c822-403d-9f5d-20d4584e0528',
+ slug=shared.EntitySlug.CONTACT,
+ type='SyncActivity',
)
-
-res = s.ecp.add_end_customer_relation_to_entity(req, operations.AddEndCustomerRelationToEntitySecurity(
- portal_auth="Bearer YOUR_BEARER_TOKEN_HERE",
-))
-if res.add_end_customer_relation_to_entity_200_application_json_object is not None:
+res = s.activity.get_entity_activity_feed(req)
+
+if res.get_entity_activity_feed_200_application_json_object is not None:
# handle response
+ pass
```
-## SDK Available Operations
-
-
-### ecp
-
-* `add_end_customer_relation_to_entity` - addEndCustomerRelationToEntity
-* `delete_entity_file` - Delete files from an entity
-* `delete_portal_user` - deletePortalUser
-* `get_all_contracts` - getAllContracts
-* `get_all_opportunities` - getAllOpportunities
-* `get_all_orders` - getAllOrders
-* `get_contact` - getContact
-* `get_contract` - get contract based on id
-* `get_entities_by_identifiers` - getEntitiesByIdentifiers
-* `get_opportunity` - getOpportunity
-* `get_order` - getOrder
-* `get_organization_settings` - getOrganizationSettings
-* `get_portal_config` - getPortalConfig
-* `get_portal_config_by_domain` - getPortalConfigByDomain
-* `get_portal_user` - getPortalUser
-* `get_schemas` - getSchemas
-* `save_entity_file` - Add files to an entity
-* `test_auth` - testAuth
-* `update_contact` - updateContact
-* `update_contract` - Update contract based on id
-* `update_opportunity` - Update an opportunity based on id
-* `update_order` - updateOrder
-* `update_portal_user` - updatePortalUser
-
-### ecp_admin
-
-* `configure_distribution` - configureDistribution
-* `delete_portal` - deletePortal
-* `extra_permission_attributes` - extraPermissionAttributes
-* `get_all_portal_configs` - getAllPortalConfigs
-* `get_ecp_contact` - getECPContact
-* `get_email_templates` - getEmailTemplates
-* `get_entity_identifiers` - getEntityIdentifiers
-* `get_org_portal_config` - getOrgPortalConfig
-* `get_portal_config` - getPortalConfig
-* `get_public_portal_config` - getPublicPortalConfig
-* `get_valid_secondary_attributes` - getValidSecondaryAttributes
-* `replace_ecp_template_variables` - replaceECPTemplateVariables
-* `save_portal_files` - Add files to portal
-* `upsert_email_templates` - upsertEmailTemplates
-* `upsert_portal` - upserts a portal
-
-### public
-
-* `activate_user` - activateUser
-* `confirm_user` - confirmUser
-* `create_user` - creates a user
-* `get_count_by_email` - getCountByEmail
-* `user_exists` - userExists
+## Available Resources and Operations
+
+
+### [activity](docs/sdks/activity/README.md)
+
+* [get_entity_activity_feed](docs/sdks/activity/README.md#get_entity_activity_feed) - getEntityActivityFeed
+
+### [balance](docs/sdks/balance/README.md)
+
+* [get_customer_balance](docs/sdks/balance/README.md#get_customer_balance) - getCustomerBalance
+
+### [ecp](docs/sdks/ecp/README.md)
+
+* [add_end_customer_relation_to_entity](docs/sdks/ecp/README.md#add_end_customer_relation_to_entity) - addEndCustomerRelationToEntity
+* [create_custom_entity_activity](docs/sdks/ecp/README.md#create_custom_entity_activity) - createCustomEntityActivity
+* [delete_entity_file](docs/sdks/ecp/README.md#delete_entity_file) - deleteEntityFile
+* [delete_portal_user](docs/sdks/ecp/README.md#delete_portal_user) - deletePortalUser
+* [get_all_contracts](docs/sdks/ecp/README.md#get_all_contracts) - getAllContracts
+* [get_all_files](docs/sdks/ecp/README.md#get_all_files) - getAllFiles
+* [get_all_opportunities](docs/sdks/ecp/README.md#get_all_opportunities) - getAllOpportunities
+* [get_all_orders](docs/sdks/ecp/README.md#get_all_orders) - getAllOrders
+* [get_billing_events](docs/sdks/ecp/README.md#get_billing_events) - getBillingEvents
+* [get_contact](docs/sdks/ecp/README.md#get_contact) - getContact
+* [get_contract](docs/sdks/ecp/README.md#get_contract) - getContract
+* [get_entities_by_identifiers](docs/sdks/ecp/README.md#get_entities_by_identifiers) - getEntitiesByIdentifiers
+* [get_file_by_id](docs/sdks/ecp/README.md#get_file_by_id) - getFileById
+* [get_files_count_by_entity](docs/sdks/ecp/README.md#get_files_count_by_entity) - getFileCountByEntity
+* [get_opportunity](docs/sdks/ecp/README.md#get_opportunity) - getOpportunity
+* [get_order](docs/sdks/ecp/README.md#get_order) - getOrder
+* [get_organization_settings](docs/sdks/ecp/README.md#get_organization_settings) - getOrganizationSettings
+* [get_portal_config](docs/sdks/ecp/README.md#get_portal_config) - getPortalConfig
+* [get_portal_user](docs/sdks/ecp/README.md#get_portal_user) - getPortalUser
+* [get_portal_widgets](docs/sdks/ecp/README.md#get_portal_widgets) - getPortalWidgets
+* [get_schemas](docs/sdks/ecp/README.md#get_schemas) - getSchemas
+* [save_entity_file](docs/sdks/ecp/README.md#save_entity_file) - saveEntityFile
+* [track_file_downloaded](docs/sdks/ecp/README.md#track_file_downloaded) - trackFileDownloaded
+* [trigger_entity_access](docs/sdks/ecp/README.md#trigger_entity_access) - triggerEntityAccess
+* [update_contact](docs/sdks/ecp/README.md#update_contact) - updateContact
+* [update_contract](docs/sdks/ecp/README.md#update_contract) - updateContract
+* [update_opportunity](docs/sdks/ecp/README.md#update_opportunity) - updateOpportunity
+* [update_order](docs/sdks/ecp/README.md#update_order) - updateOrder
+* [update_portal_user](docs/sdks/ecp/README.md#update_portal_user) - updatePortalUser
+
+### [ecp_admin](docs/sdks/ecpadmin/README.md)
+
+* [configure_distribution](docs/sdks/ecpadmin/README.md#configure_distribution) - configureDistribution
+* [create_sso_user](docs/sdks/ecpadmin/README.md#create_sso_user) - createSSOUser
+* [delete_portal](docs/sdks/ecpadmin/README.md#delete_portal) - deletePortal
+* [extra_permission_attributes](docs/sdks/ecpadmin/README.md#extra_permission_attributes) - extraPermissionAttributes
+* [fetch_portal_users_by_related_entity](docs/sdks/ecpadmin/README.md#fetch_portal_users_by_related_entity) - fetchPortalUsersByRelatedEntity
+* [get_all_portal_configs](docs/sdks/ecpadmin/README.md#get_all_portal_configs) - getAllPortalConfigs
+* [get_ecp_contact](docs/sdks/ecpadmin/README.md#get_ecp_contact) - getECPContact
+* [get_email_templates](docs/sdks/ecpadmin/README.md#get_email_templates) - getEmailTemplates
+* [get_entity_identifiers](docs/sdks/ecpadmin/README.md#get_entity_identifiers) - getEntityIdentifiers
+* [get_org_portal_config](docs/sdks/ecpadmin/README.md#get_org_portal_config) - getOrgPortalConfig
+* [get_portal_config](docs/sdks/ecpadmin/README.md#get_portal_config) - getPortalConfig
+* [get_portal_widgets](docs/sdks/ecpadmin/README.md#get_portal_widgets) - getPortalWidgets
+* [get_valid_secondary_attributes](docs/sdks/ecpadmin/README.md#get_valid_secondary_attributes) - getValidSecondaryAttributes
+* [login_to_portal_as_user](docs/sdks/ecpadmin/README.md#login_to_portal_as_user) - loginToPortalAsUser
+* [replace_ecp_template_variables](docs/sdks/ecpadmin/README.md#replace_ecp_template_variables) - replaceECPTemplateVariables
+* [save_portal_files](docs/sdks/ecpadmin/README.md#save_portal_files) - savePortalFiles
+* [upsert_email_templates](docs/sdks/ecpadmin/README.md#upsert_email_templates) - upsertEmailTemplates
+* [upsert_portal](docs/sdks/ecpadmin/README.md#upsert_portal) - upsertPortal
+* [upsert_portal_widget](docs/sdks/ecpadmin/README.md#upsert_portal_widget) - upsertPortalWidget
+
+### [public](docs/sdks/public/README.md)
+
+* [confirm_user](docs/sdks/public/README.md#confirm_user) - confirmUser
+* [create_user](docs/sdks/public/README.md#create_user) - createUser
+* [get_contact_count](docs/sdks/public/README.md#get_contact_count) - getContactCount
+* [get_count_by_email](docs/sdks/public/README.md#get_count_by_email) - getCountByEmail
+* [get_portal_config_by_domain](docs/sdks/public/README.md#get_portal_config_by_domain) - getPortalConfigByDomain
+* [get_public_portal_config](docs/sdks/public/README.md#get_public_portal_config) - getPublicPortalConfig
+* [get_public_portal_widgets](docs/sdks/public/README.md#get_public_portal_widgets) - getPublicPortalWidgets
+* [user_exists](docs/sdks/public/README.md#user_exists) - userExists
+
+
+
+
+
+
+
+
+
+# Pagination
+
+Some of the endpoints in this SDK support pagination. To use pagination, you make your SDK calls as usual, but the
+returned response object will have a `Next` method that can be called to pull down the next group of results. If the
+return value of `Next` is `None`, then there are no more pages to be fetched.
+
+Here's an example of one such pagination call:
+
+
+
+
+
+# Error Handling
+
+Handling errors in your SDK should largely match your expectations. All operations return a response object or raise an error. If Error objects are specified in your OpenAPI Spec, the SDK will raise the appropriate Error type.
+
+
+
+
+
+# Server Selection
+
+## Select Server by Index
+
+You can override the default server globally by passing a server index to the `server_idx: int` optional parameter when initializing the SDK client instance. The selected server will then be used as the default on the operations that use it. This table lists the indexes associated with the available servers:
+
+| # | Server | Variables |
+| - | ------ | --------- |
+| 0 | `https://customer-portal-api.sls.epilot.io` | None |
+
+For example:
+
+
+```python
+import epilot
+import dateutil.parser
+from epilot.models import operations, shared
+
+s = epilot.Epilot(
+ security=shared.Security(
+ epilot_auth="",
+ ),
+ server_idx=0
+)
+
+req = operations.GetEntityActivityFeedRequest(
+ id='5da0a718-c822-403d-9f5d-20d4584e0528',
+ slug=shared.EntitySlug.CONTACT,
+ type='SyncActivity',
+)
+
+res = s.activity.get_entity_activity_feed(req)
+
+if res.get_entity_activity_feed_200_application_json_object is not None:
+ # handle response
+ pass
+```
+
+
+## Override Server URL Per-Client
+
+The default server can also be overridden globally by passing a URL to the `server_url: str` optional parameter when initializing the SDK client instance. For example:
+
+
+```python
+import epilot
+import dateutil.parser
+from epilot.models import operations, shared
+
+s = epilot.Epilot(
+ security=shared.Security(
+ epilot_auth="",
+ ),
+ server_url="https://customer-portal-api.sls.epilot.io"
+)
+
+req = operations.GetEntityActivityFeedRequest(
+ id='5da0a718-c822-403d-9f5d-20d4584e0528',
+ slug=shared.EntitySlug.CONTACT,
+ type='SyncActivity',
+)
+
+res = s.activity.get_entity_activity_feed(req)
+
+if res.get_entity_activity_feed_200_application_json_object is not None:
+ # handle response
+ pass
+```
+
+
+
+
+
+# Custom HTTP Client
+
+The Python SDK makes API calls using the (requests)[https://pypi.org/project/requests/] HTTP library. In order to provide a convenient way to configure timeouts, cookies, proxies, custom headers, and other low-level configuration, you can initialize the SDK client with a custom `requests.Session` object.
+
+
+For example, you could specify a header for every request that your sdk makes as follows:
+
+```python
+import epilot
+import requests
+
+http_client = requests.Session()
+http_client.headers.update({'x-custom-header': 'someValue'})
+s = epilot.Epilot(client: http_client)
+```
+
+
+
+
+
+
### SDK Generated by [Speakeasy](https://docs.speakeasyapi.dev/docs/using-speakeasy/client-sdks)
diff --git a/customer_portal/RELEASES.md b/customer_portal/RELEASES.md
index 619074bfc..e8e1da114 100644
--- a/customer_portal/RELEASES.md
+++ b/customer_portal/RELEASES.md
@@ -34,4 +34,662 @@ Based on:
### Changes
Based on:
- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
-- Speakeasy CLI 1.19.2 (2.16.5) https://github.com/speakeasy-api/speakeasy
\ No newline at end of file
+- Speakeasy CLI 1.19.2 (2.16.5) https://github.com/speakeasy-api/speakeasy
+
+## 2023-03-31 00:34:45
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.19.2 (2.16.5) https://github.com/speakeasy-api/speakeasy
+
+## 2023-04-01 00:35:12
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.19.3 (2.16.7) https://github.com/speakeasy-api/speakeasy
+
+## 2023-04-06 00:31:19
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.19.6 (2.17.8) https://github.com/speakeasy-api/speakeasy
+
+## 2023-04-08 00:30:17
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.19.6 (2.17.8) https://github.com/speakeasy-api/speakeasy
+
+## 2023-04-12 00:32:10
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.19.7 (2.17.9) https://github.com/speakeasy-api/speakeasy
+
+## 2023-04-14 00:31:27
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.20.0 (2.18.0) https://github.com/speakeasy-api/speakeasy
+
+## 2023-04-18 00:31:22
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.20.1 (2.18.1) https://github.com/speakeasy-api/speakeasy
+
+## 2023-04-19 00:34:00
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.20.2 (2.18.2) https://github.com/speakeasy-api/speakeasy
+
+## 2023-04-21 00:31:53
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.21.4 (2.19.1) https://github.com/speakeasy-api/speakeasy
+
+## 2023-04-22 00:32:03
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.22.1 (2.20.1) https://github.com/speakeasy-api/speakeasy
+
+## 2023-04-26 00:33:29
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.23.1 (2.21.1) https://github.com/speakeasy-api/speakeasy
+
+## 2023-04-27 00:35:09
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.25.1 (2.22.0) https://github.com/speakeasy-api/speakeasy
+
+## 2023-04-28 00:33:46
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.26.2 (2.23.2) https://github.com/speakeasy-api/speakeasy
+
+## 2023-04-29 00:31:45
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.26.4 (2.23.4) https://github.com/speakeasy-api/speakeasy
+
+## 2023-05-02 00:32:31
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.26.5 (2.23.6) https://github.com/speakeasy-api/speakeasy
+
+## 2023-05-03 00:32:00
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.27.0 (2.24.0) https://github.com/speakeasy-api/speakeasy
+
+## 2023-05-05 00:30:31
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.29.0 (2.26.0) https://github.com/speakeasy-api/speakeasy
+
+## 2023-05-06 00:29:40
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.29.1 (2.26.1) https://github.com/speakeasy-api/speakeasy
+
+## 2023-05-10 00:31:42
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.29.2 (2.26.2) https://github.com/speakeasy-api/speakeasy
+
+## 2023-05-11 00:32:10
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.30.0 (2.26.3) https://github.com/speakeasy-api/speakeasy
+
+## 2023-05-12 00:32:02
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.30.1 (2.26.4) https://github.com/speakeasy-api/speakeasy
+
+## 2023-05-13 00:30:22
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.31.1 (2.27.0) https://github.com/speakeasy-api/speakeasy
+
+## 2023-05-16 00:32:32
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.32.0 (2.28.0) https://github.com/speakeasy-api/speakeasy
+
+## 2023-05-17 00:35:49
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.33.2 (2.29.0) https://github.com/speakeasy-api/speakeasy
+
+## 2023-05-18 00:32:33
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.34.0 (2.30.0) https://github.com/speakeasy-api/speakeasy
+
+## 2023-05-19 00:32:54
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.35.0 (2.31.0) https://github.com/speakeasy-api/speakeasy
+
+## 2023-05-23 00:34:05
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.37.5 (2.32.2) https://github.com/speakeasy-api/speakeasy
+
+## 2023-05-27 00:34:31
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.39.0 (2.32.7) https://github.com/speakeasy-api/speakeasy
+
+## 2023-06-01 00:46:34
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.40.2 (2.34.2) https://github.com/speakeasy-api/speakeasy
+
+## 2023-06-02 00:37:42
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.40.3 (2.34.7) https://github.com/speakeasy-api/speakeasy
+
+## 2023-06-03 00:36:28
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.43.0 (2.35.3) https://github.com/speakeasy-api/speakeasy
+
+## 2023-06-06 00:38:43
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.44.0 (2.35.3) https://github.com/speakeasy-api/speakeasy
+
+## 2023-06-07 00:39:38
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.44.2 (2.35.9) https://github.com/speakeasy-api/speakeasy
+
+## 2023-06-08 00:37:57
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.45.0 (2.37.0) https://github.com/speakeasy-api/speakeasy
+
+## 2023-06-09 00:40:31
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.45.2 (2.37.2) https://github.com/speakeasy-api/speakeasy
+
+## 2023-06-10 00:35:50
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.47.0 (2.39.0) https://github.com/speakeasy-api/speakeasy
+
+## 2023-06-11 00:42:01
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.47.1 (2.39.2) https://github.com/speakeasy-api/speakeasy
+
+## 2023-06-13 00:37:47
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.47.1 (2.39.2) https://github.com/speakeasy-api/speakeasy
+
+## 2023-06-14 00:36:10
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.47.3 (2.40.1) https://github.com/speakeasy-api/speakeasy
+
+## 2023-06-16 00:38:15
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.48.0 (2.41.1) https://github.com/speakeasy-api/speakeasy
+
+## 2023-06-20 00:35:26
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.49.0 (2.41.4) https://github.com/speakeasy-api/speakeasy
+
+## 2023-06-21 00:37:12
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.49.1 (2.41.5) https://github.com/speakeasy-api/speakeasy
+
+## 2023-06-23 00:41:04
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.50.1 (2.43.2) https://github.com/speakeasy-api/speakeasy
+
+## 2023-06-27 00:41:12
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.51.1 (2.50.2) https://github.com/speakeasy-api/speakeasy
+
+## 2023-06-29 00:40:51
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.51.3 (2.52.2) https://github.com/speakeasy-api/speakeasy
+
+## 2023-07-01 00:45:49
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.52.0 (2.55.0) https://github.com/speakeasy-api/speakeasy
+
+## 2023-07-06 00:42:49
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.52.2 (2.57.2) https://github.com/speakeasy-api/speakeasy
+
+## 2023-07-07 00:42:22
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.53.0 (2.58.0) https://github.com/speakeasy-api/speakeasy
+
+## 2023-07-08 00:42:12
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.53.1 (2.58.2) https://github.com/speakeasy-api/speakeasy
+
+## 2023-07-11 00:37:34
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.56.0 (2.61.0) https://github.com/speakeasy-api/speakeasy
+
+## 2023-07-12 00:43:25
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.56.3 (2.61.4) https://github.com/speakeasy-api/speakeasy
+
+## 2023-07-13 00:42:15
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.57.0 (2.62.1) https://github.com/speakeasy-api/speakeasy
+
+## 2023-07-14 00:42:35
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.59.0 (2.65.0) https://github.com/speakeasy-api/speakeasy
+
+## 2023-07-18 01:00:38
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.61.0 (2.70.0) https://github.com/speakeasy-api/speakeasy
+
+## 2023-07-19 01:05:05
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.62.1 (2.70.2) https://github.com/speakeasy-api/speakeasy
+
+## 2023-07-22 00:37:30
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.64.0 (2.71.0) https://github.com/speakeasy-api/speakeasy
+
+## 2023-07-26 00:35:53
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.65.0 (2.73.0) https://github.com/speakeasy-api/speakeasy
+
+## 2023-07-27 00:34:38
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.65.1 (2.73.1) https://github.com/speakeasy-api/speakeasy
+
+## 2023-07-28 00:34:30
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.65.2 (2.75.1) https://github.com/speakeasy-api/speakeasy
+
+## 2023-08-01 00:40:25
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.66.1 (2.75.2) https://github.com/speakeasy-api/speakeasy
+
+## 2023-08-03 00:36:23
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.68.1 (2.77.1) https://github.com/speakeasy-api/speakeasy
+
+## 2023-08-04 00:35:47
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.68.3 (2.81.1) https://github.com/speakeasy-api/speakeasy
+
+## 2023-08-08 00:34:07
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.69.1 (2.82.0) https://github.com/speakeasy-api/speakeasy
+
+## 2023-08-11 00:28:03
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.71.0 (2.83.3) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v1.39.1] customer_portal
+
+## 2023-08-15 00:28:35
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.72.0 (2.84.1) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v1.40.0] customer_portal
+
+## 2023-08-17 00:28:07
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.73.1 (2.84.3) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v1.40.1] customer_portal
+
+## 2023-08-18 00:28:23
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.73.1 (2.84.3) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v1.40.2] customer_portal
+
+## 2023-08-19 00:27:08
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.74.3 (2.86.6) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v1.40.3] customer_portal
+
+## 2023-08-26 00:27:39
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.74.15 (2.88.2) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v1.41.0] customer_portal
+
+## 2023-08-29 00:29:23
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.74.17 (2.88.5) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v1.41.1] customer_portal
+
+## 2023-08-31 00:29:29
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.76.0 (2.89.1) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v1.42.0] customer_portal
+
+## 2023-09-01 00:31:37
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.77.0 (2.91.2) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v1.43.0] customer_portal
+
+## 2023-09-02 00:28:07
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.77.2 (2.93.0) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v1.43.1] customer_portal
+
+## 2023-09-05 00:28:50
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.78.3 (2.96.3) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v1.43.2] customer_portal
+
+## 2023-09-06 00:29:27
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.78.8 (2.96.6) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v1.43.3] customer_portal
+
+## 2023-09-12 00:28:11
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.82.5 (2.108.3) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v1.43.4] customer_portal
+
+## 2023-09-16 00:28:39
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.86.0 (2.115.2) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v1.43.5] customer_portal
+
+## 2023-09-20 00:29:41
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.88.0 (2.118.1) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v1.43.6] customer_portal
+
+## 2023-09-21 00:29:39
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.88.1 (2.122.1) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v1.43.7] customer_portal
+
+## 2023-09-22 00:30:01
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.89.0 (2.125.1) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v1.44.0] customer_portal
+
+## 2023-09-23 00:28:35
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.90.0 (2.125.1) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v1.44.1] customer_portal
+
+## 2023-09-26 00:30:29
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.91.0 (2.129.1) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v1.45.0] customer_portal
+
+## 2023-09-27 00:30:26
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.91.2 (2.131.1) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v1.45.1] customer_portal
+
+## 2023-09-29 00:30:13
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.91.3 (2.139.1) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v1.46.0] customer_portal
+
+## 2023-09-30 00:29:04
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.91.4 (2.139.2) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v1.46.1] customer_portal
+
+## 2023-10-01 00:35:05
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.92.2 (2.142.2) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v1.47.0] customer_portal
+
+## 2023-10-02 00:30:39
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.92.3 (2.143.2) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v1.47.1] customer_portal
+
+## 2023-10-05 00:30:19
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.94.0 (2.147.0) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v1.47.2] customer_portal
+
+## 2023-10-07 00:29:36
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.96.1 (2.150.0) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v1.48.0] customer_portal
+
+## 2023-10-13 00:31:05
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.99.0 (2.154.1) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v1.48.1] customer_portal
+
+## 2023-10-14 00:29:17
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.99.2 (2.155.1) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v1.48.2] customer_portal
+
+## 2023-10-18 00:30:34
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.101.0 (2.161.0) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v2.0.0] customer_portal
+
+## 2023-10-21 00:29:10
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.104.0 (2.169.0) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v2.1.0] customer_portal
+
+## 2023-10-24 00:30:33
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.105.0 (2.169.3) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v2.1.1] customer_portal
+
+## 2023-10-26 00:29:32
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.107.0 (2.171.0) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v2.1.2] customer_portal
+
+## 2023-10-28 00:29:14
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.109.0 (2.173.0) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v2.1.3] customer_portal
+
+## 2023-10-31 00:30:33
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.109.0 (2.173.0) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v2.1.4] customer_portal
+
+## 2023-11-01 00:32:47
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/customer-portal.yaml
+- Speakeasy CLI 1.109.2 (2.173.0) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v2.1.5] customer_portal
\ No newline at end of file
diff --git a/customer_portal/USAGE.md b/customer_portal/USAGE.md
index 6cfb22873..6c397b9a3 100755
--- a/customer_portal/USAGE.md
+++ b/customer_portal/USAGE.md
@@ -1,21 +1,27 @@
+
+
```python
import epilot
+import dateutil.parser
from epilot.models import operations, shared
-s = epilot.Epilot()
-
+s = epilot.Epilot(
+ security=shared.Security(
+ epilot_auth="",
+ ),
+)
-req = operations.AddEndCustomerRelationToEntityRequest(
- id="unde",
- slug="contact",
+req = operations.GetEntityActivityFeedRequest(
+ id='5da0a718-c822-403d-9f5d-20d4584e0528',
+ slug=shared.EntitySlug.CONTACT,
+ type='SyncActivity',
)
-
-res = s.ecp.add_end_customer_relation_to_entity(req, operations.AddEndCustomerRelationToEntitySecurity(
- portal_auth="Bearer YOUR_BEARER_TOKEN_HERE",
-))
-if res.add_end_customer_relation_to_entity_200_application_json_object is not None:
+res = s.activity.get_entity_activity_feed(req)
+
+if res.get_entity_activity_feed_200_application_json_object is not None:
# handle response
+ pass
```
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/addendcustomerrelationtoentity200applicationjson.md b/customer_portal/docs/models/operations/addendcustomerrelationtoentity200applicationjson.md
new file mode 100755
index 000000000..f5783fd8c
--- /dev/null
+++ b/customer_portal/docs/models/operations/addendcustomerrelationtoentity200applicationjson.md
@@ -0,0 +1,11 @@
+# AddEndCustomerRelationToEntity200ApplicationJSON
+
+Portal user is added as a relation to the requested entity successfully.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- |
+| `entity` | [Optional[shared.EntityItem]](../../models/shared/entityitem.md) | :heavy_minus_sign: | N/A |
+| `relations` | List[[shared.EntityItem](../../models/shared/entityitem.md)] | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/addendcustomerrelationtoentityrequest.md b/customer_portal/docs/models/operations/addendcustomerrelationtoentityrequest.md
new file mode 100755
index 000000000..121af0f78
--- /dev/null
+++ b/customer_portal/docs/models/operations/addendcustomerrelationtoentityrequest.md
@@ -0,0 +1,9 @@
+# AddEndCustomerRelationToEntityRequest
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------ | ------------------------------------------------------ | ------------------------------------------------------ | ------------------------------------------------------ | ------------------------------------------------------ |
+| `id` | *str* | :heavy_check_mark: | The ID of the Entity | 5da0a718-c822-403d-9f5d-20d4584e0528 |
+| `slug` | [shared.EntitySlug](../../models/shared/entityslug.md) | :heavy_check_mark: | The slug of an entity | contact |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/addendcustomerrelationtoentityresponse.md b/customer_portal/docs/models/operations/addendcustomerrelationtoentityresponse.md
new file mode 100755
index 000000000..30c4b0224
--- /dev/null
+++ b/customer_portal/docs/models/operations/addendcustomerrelationtoentityresponse.md
@@ -0,0 +1,12 @@
+# AddEndCustomerRelationToEntityResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `error_resp` | [Optional[shared.ErrorResp]](../../models/shared/errorresp.md) | :heavy_minus_sign: | Could not authenticate the user |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
+| `add_end_customer_relation_to_entity_200_application_json_object` | [Optional[AddEndCustomerRelationToEntity200ApplicationJSON]](../../models/operations/addendcustomerrelationtoentity200applicationjson.md) | :heavy_minus_sign: | Portal user is added as a relation to the requested entity successfully. |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/addendcustomerrelationtoentitysecurity.md b/customer_portal/docs/models/operations/addendcustomerrelationtoentitysecurity.md
new file mode 100755
index 000000000..757f431ba
--- /dev/null
+++ b/customer_portal/docs/models/operations/addendcustomerrelationtoentitysecurity.md
@@ -0,0 +1,8 @@
+# AddEndCustomerRelationToEntitySecurity
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `portal_auth` | *str* | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/configuredistribution200applicationjson.md b/customer_portal/docs/models/operations/configuredistribution200applicationjson.md
new file mode 100755
index 000000000..242f27bc9
--- /dev/null
+++ b/customer_portal/docs/models/operations/configuredistribution200applicationjson.md
@@ -0,0 +1,10 @@
+# ConfigureDistribution200ApplicationJSON
+
+The cloudfront distribution has been configure successfully for the custom domain.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- |
+| `domain_name` | *Optional[str]* | :heavy_minus_sign: | The domain name of the configured distribution | dsj8op4ha01jha23.cloudfront.net |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/configuredistributionrequest.md b/customer_portal/docs/models/operations/configuredistributionrequest.md
new file mode 100755
index 000000000..a9159643c
--- /dev/null
+++ b/customer_portal/docs/models/operations/configuredistributionrequest.md
@@ -0,0 +1,8 @@
+# ConfigureDistributionRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- |
+| `origin` | [shared.Origin](../../models/shared/origin.md) | :heavy_check_mark: | Origin of the portal |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/configuredistributionresponse.md b/customer_portal/docs/models/operations/configuredistributionresponse.md
new file mode 100755
index 000000000..c8108aab4
--- /dev/null
+++ b/customer_portal/docs/models/operations/configuredistributionresponse.md
@@ -0,0 +1,12 @@
+# ConfigureDistributionResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `error_resp` | [Optional[shared.ErrorResp]](../../models/shared/errorresp.md) | :heavy_minus_sign: | Could not authenticate the user |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
+| `configure_distribution_200_application_json_object` | [Optional[ConfigureDistribution200ApplicationJSON]](../../models/operations/configuredistribution200applicationjson.md) | :heavy_minus_sign: | The cloudfront distribution has been configure successfully for the custom domain. |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/configuredistributionsecurity.md b/customer_portal/docs/models/operations/configuredistributionsecurity.md
new file mode 100755
index 000000000..ae8f09d62
--- /dev/null
+++ b/customer_portal/docs/models/operations/configuredistributionsecurity.md
@@ -0,0 +1,8 @@
+# ConfigureDistributionSecurity
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `epilot_auth` | *str* | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/confirmuserrequest.md b/customer_portal/docs/models/operations/confirmuserrequest.md
new file mode 100755
index 000000000..c1921893a
--- /dev/null
+++ b/customer_portal/docs/models/operations/confirmuserrequest.md
@@ -0,0 +1,10 @@
+# ConfirmUserRequest
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- |
+| `id` | *str* | :heavy_check_mark: | The ID of portal user id | 5da0a718-c822-403d-9f5d-20d4584e0528 |
+| `org_id` | *str* | :heavy_check_mark: | Organization ID | 123 |
+| `origin` | [shared.Origin](../../models/shared/origin.md) | :heavy_check_mark: | Origin of the portal | |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/confirmuserresponse.md b/customer_portal/docs/models/operations/confirmuserresponse.md
new file mode 100755
index 000000000..13ed575d9
--- /dev/null
+++ b/customer_portal/docs/models/operations/confirmuserresponse.md
@@ -0,0 +1,11 @@
+# ConfirmUserResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `error_resp` | [Optional[shared.ErrorResp]](../../models/shared/errorresp.md) | :heavy_minus_sign: | Internal Server Error |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/createcustomentityactivityrequest.md b/customer_portal/docs/models/operations/createcustomentityactivityrequest.md
new file mode 100755
index 000000000..d1a3a4a6c
--- /dev/null
+++ b/customer_portal/docs/models/operations/createcustomentityactivityrequest.md
@@ -0,0 +1,9 @@
+# CreateCustomEntityActivityRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- |
+| `activity` | [Optional[shared.Activity]](../../models/shared/activity.md) | :heavy_minus_sign: | N/A |
+| `entities` | List[*str*] | :heavy_minus_sign: | Comma-separated list of entities which the activity primarily concerns |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/createcustomentityactivityresponse.md b/customer_portal/docs/models/operations/createcustomentityactivityresponse.md
new file mode 100755
index 000000000..587f069b4
--- /dev/null
+++ b/customer_portal/docs/models/operations/createcustomentityactivityresponse.md
@@ -0,0 +1,12 @@
+# CreateCustomEntityActivityResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
+| `activity_item` | [Optional[shared.ActivityItem]](../../models/shared/activityitem.md) | :heavy_minus_sign: | Success |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `error_resp` | [Optional[shared.ErrorResp]](../../models/shared/errorresp.md) | :heavy_minus_sign: | Could not authenticate the user |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/createcustomentityactivitysecurity.md b/customer_portal/docs/models/operations/createcustomentityactivitysecurity.md
new file mode 100755
index 000000000..c63cdef81
--- /dev/null
+++ b/customer_portal/docs/models/operations/createcustomentityactivitysecurity.md
@@ -0,0 +1,8 @@
+# CreateCustomEntityActivitySecurity
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `portal_auth` | *str* | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/createssouser201applicationjson.md b/customer_portal/docs/models/operations/createssouser201applicationjson.md
new file mode 100755
index 000000000..ee00732ab
--- /dev/null
+++ b/customer_portal/docs/models/operations/createssouser201applicationjson.md
@@ -0,0 +1,10 @@
+# CreateSSOUser201ApplicationJSON
+
+SSO User created successfully.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- |
+| `data` | [Optional[shared.PortalUser]](../../models/shared/portaluser.md) | :heavy_minus_sign: | The portal user entity |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/createssouserrequest.md b/customer_portal/docs/models/operations/createssouserrequest.md
new file mode 100755
index 000000000..d761e97d2
--- /dev/null
+++ b/customer_portal/docs/models/operations/createssouserrequest.md
@@ -0,0 +1,9 @@
+# CreateSSOUserRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- |
+| `create_sso_user_request` | [shared.CreateSSOUserRequest](../../models/shared/createssouserrequest.md) | :heavy_check_mark: | Portal user payload |
+| `origin` | [shared.Origin](../../models/shared/origin.md) | :heavy_check_mark: | Origin of the portal |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/createssouserresponse.md b/customer_portal/docs/models/operations/createssouserresponse.md
new file mode 100755
index 000000000..6cc4a3ba3
--- /dev/null
+++ b/customer_portal/docs/models/operations/createssouserresponse.md
@@ -0,0 +1,12 @@
+# CreateSSOUserResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `error_resp` | [Optional[shared.ErrorResp]](../../models/shared/errorresp.md) | :heavy_minus_sign: | The request could not be validated |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
+| `create_sso_user_201_application_json_object` | [Optional[CreateSSOUser201ApplicationJSON]](../../models/operations/createssouser201applicationjson.md) | :heavy_minus_sign: | SSO User created successfully. |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/createssousersecurity.md b/customer_portal/docs/models/operations/createssousersecurity.md
new file mode 100755
index 000000000..42e9555a3
--- /dev/null
+++ b/customer_portal/docs/models/operations/createssousersecurity.md
@@ -0,0 +1,8 @@
+# CreateSSOUserSecurity
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `epilot_auth` | *str* | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/createuser201applicationjson.md b/customer_portal/docs/models/operations/createuser201applicationjson.md
new file mode 100755
index 000000000..de0e9abaa
--- /dev/null
+++ b/customer_portal/docs/models/operations/createuser201applicationjson.md
@@ -0,0 +1,11 @@
+# CreateUser201ApplicationJSON
+
+User created successfully.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- |
+| `message` | [CreateUser201ApplicationJSONMessage](../../models/operations/createuser201applicationjsonmessage.md) | :heavy_check_mark: | N/A |
+| `response` | [shared.PortalUser](../../models/shared/portaluser.md) | :heavy_check_mark: | The portal user entity |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/createuser201applicationjsonmessage.md b/customer_portal/docs/models/operations/createuser201applicationjsonmessage.md
new file mode 100755
index 000000000..caba31659
--- /dev/null
+++ b/customer_portal/docs/models/operations/createuser201applicationjsonmessage.md
@@ -0,0 +1,8 @@
+# CreateUser201ApplicationJSONMessage
+
+
+## Values
+
+| Name | Value |
+| --------------------------- | --------------------------- |
+| `USER_CREATED_SUCCESSFULLY` | User created successfully |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/createuserrequest.md b/customer_portal/docs/models/operations/createuserrequest.md
new file mode 100755
index 000000000..2251b5519
--- /dev/null
+++ b/customer_portal/docs/models/operations/createuserrequest.md
@@ -0,0 +1,9 @@
+# CreateUserRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- |
+| `create_user_request` | [shared.CreateUserRequest](../../models/shared/createuserrequest.md) | :heavy_check_mark: | Portal user payload |
+| `origin` | [shared.Origin](../../models/shared/origin.md) | :heavy_check_mark: | Origin of the portal |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/createuserresponse.md b/customer_portal/docs/models/operations/createuserresponse.md
new file mode 100755
index 000000000..e198a343b
--- /dev/null
+++ b/customer_portal/docs/models/operations/createuserresponse.md
@@ -0,0 +1,12 @@
+# CreateUserResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `error_resp` | [Optional[shared.ErrorResp]](../../models/shared/errorresp.md) | :heavy_minus_sign: | The request could not be validated |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
+| `create_user_201_application_json_object` | [Optional[CreateUser201ApplicationJSON]](../../models/operations/createuser201applicationjson.md) | :heavy_minus_sign: | User created successfully. |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/deleteentityfile202applicationjson.md b/customer_portal/docs/models/operations/deleteentityfile202applicationjson.md
new file mode 100755
index 000000000..f56cf1ce0
--- /dev/null
+++ b/customer_portal/docs/models/operations/deleteentityfile202applicationjson.md
@@ -0,0 +1,10 @@
+# DeleteEntityFile202ApplicationJSON
+
+The files are removed from the requested entity successfully.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ |
+| `deleted_files` | List[*str*] | :heavy_minus_sign: | N/A | 00250c75-afd4-4c94-ba7a-ba0df638eba5 |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/deleteentityfileresponse.md b/customer_portal/docs/models/operations/deleteentityfileresponse.md
new file mode 100755
index 000000000..411f75a86
--- /dev/null
+++ b/customer_portal/docs/models/operations/deleteentityfileresponse.md
@@ -0,0 +1,12 @@
+# DeleteEntityFileResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `error_resp` | [Optional[shared.ErrorResp]](../../models/shared/errorresp.md) | :heavy_minus_sign: | The request could not be validated |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
+| `delete_entity_file_202_application_json_object` | [Optional[DeleteEntityFile202ApplicationJSON]](../../models/operations/deleteentityfile202applicationjson.md) | :heavy_minus_sign: | The files are removed from the requested entity successfully. |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/deleteentityfilesecurity.md b/customer_portal/docs/models/operations/deleteentityfilesecurity.md
new file mode 100755
index 000000000..67841fc0e
--- /dev/null
+++ b/customer_portal/docs/models/operations/deleteentityfilesecurity.md
@@ -0,0 +1,8 @@
+# DeleteEntityFileSecurity
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `portal_auth` | *str* | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/deleteportalrequest.md b/customer_portal/docs/models/operations/deleteportalrequest.md
new file mode 100755
index 000000000..40381b067
--- /dev/null
+++ b/customer_portal/docs/models/operations/deleteportalrequest.md
@@ -0,0 +1,8 @@
+# DeletePortalRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- |
+| `origin` | [shared.Origin](../../models/shared/origin.md) | :heavy_check_mark: | Origin of the portal |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/deleteportalresponse.md b/customer_portal/docs/models/operations/deleteportalresponse.md
new file mode 100755
index 000000000..838d556aa
--- /dev/null
+++ b/customer_portal/docs/models/operations/deleteportalresponse.md
@@ -0,0 +1,11 @@
+# DeletePortalResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `error_resp` | [Optional[shared.ErrorResp]](../../models/shared/errorresp.md) | :heavy_minus_sign: | Could not authenticate the user |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/deleteportalsecurity.md b/customer_portal/docs/models/operations/deleteportalsecurity.md
new file mode 100755
index 000000000..0e0a7611f
--- /dev/null
+++ b/customer_portal/docs/models/operations/deleteportalsecurity.md
@@ -0,0 +1,8 @@
+# DeletePortalSecurity
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `epilot_auth` | *str* | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/deleteportaluser200applicationjson.md b/customer_portal/docs/models/operations/deleteportaluser200applicationjson.md
new file mode 100755
index 000000000..920f11e50
--- /dev/null
+++ b/customer_portal/docs/models/operations/deleteportaluser200applicationjson.md
@@ -0,0 +1,11 @@
+# DeletePortalUser200ApplicationJSON
+
+Portal user deleted successfully.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------- |
+| `data` | *Optional[str]* | :heavy_minus_sign: | Entity ID | 5da0a718-c822-403d-9f5d-20d4584e0528 |
+| `message` | [Optional[DeletePortalUser200ApplicationJSONMessage]](../../models/operations/deleteportaluser200applicationjsonmessage.md) | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/deleteportaluser200applicationjsonmessage.md b/customer_portal/docs/models/operations/deleteportaluser200applicationjsonmessage.md
new file mode 100755
index 000000000..70f160dca
--- /dev/null
+++ b/customer_portal/docs/models/operations/deleteportaluser200applicationjsonmessage.md
@@ -0,0 +1,8 @@
+# DeletePortalUser200ApplicationJSONMessage
+
+
+## Values
+
+| Name | Value |
+| -------------------------- | -------------------------- |
+| `USER_SUCCESFULLY_DELETED` | User Succesfully Deleted |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/deleteportaluserresponse.md b/customer_portal/docs/models/operations/deleteportaluserresponse.md
new file mode 100755
index 000000000..aa68b7660
--- /dev/null
+++ b/customer_portal/docs/models/operations/deleteportaluserresponse.md
@@ -0,0 +1,12 @@
+# DeletePortalUserResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `error_resp` | [Optional[shared.ErrorResp]](../../models/shared/errorresp.md) | :heavy_minus_sign: | Could not authenticate the user |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
+| `delete_portal_user_200_application_json_object` | [Optional[DeletePortalUser200ApplicationJSON]](../../models/operations/deleteportaluser200applicationjson.md) | :heavy_minus_sign: | Portal user deleted successfully. |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/deleteportalusersecurity.md b/customer_portal/docs/models/operations/deleteportalusersecurity.md
new file mode 100755
index 000000000..1c3197673
--- /dev/null
+++ b/customer_portal/docs/models/operations/deleteportalusersecurity.md
@@ -0,0 +1,8 @@
+# DeletePortalUserSecurity
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `portal_auth` | *str* | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/extrapermissionattributes200applicationjson.md b/customer_portal/docs/models/operations/extrapermissionattributes200applicationjson.md
new file mode 100755
index 000000000..2591a9a54
--- /dev/null
+++ b/customer_portal/docs/models/operations/extrapermissionattributes200applicationjson.md
@@ -0,0 +1,10 @@
+# ExtraPermissionAttributes200ApplicationJSON
+
+Retrieved extra permission attributes successfully.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| --------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- |
+| `data` | [Optional[ExtraPermissionAttributes200ApplicationJSONData]](../../models/operations/extrapermissionattributes200applicationjsondata.md) | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/extrapermissionattributes200applicationjsondata.md b/customer_portal/docs/models/operations/extrapermissionattributes200applicationjsondata.md
new file mode 100755
index 000000000..290dc29cf
--- /dev/null
+++ b/customer_portal/docs/models/operations/extrapermissionattributes200applicationjsondata.md
@@ -0,0 +1,13 @@
+# ExtraPermissionAttributes200ApplicationJSONData
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- |
+| `contact` | List[[shared.ExtraSchemaAttributes](../../models/shared/extraschemaattributes.md)] | :heavy_minus_sign: | N/A |
+| `contract` | List[[shared.ExtraSchemaAttributes](../../models/shared/extraschemaattributes.md)] | :heavy_minus_sign: | N/A |
+| `meter` | List[[shared.ExtraSchemaAttributes](../../models/shared/extraschemaattributes.md)] | :heavy_minus_sign: | N/A |
+| `meter_counter` | List[[shared.ExtraSchemaAttributes](../../models/shared/extraschemaattributes.md)] | :heavy_minus_sign: | N/A |
+| `opportunity` | List[[shared.ExtraSchemaAttributes](../../models/shared/extraschemaattributes.md)] | :heavy_minus_sign: | N/A |
+| `order` | List[[shared.ExtraSchemaAttributes](../../models/shared/extraschemaattributes.md)] | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/extrapermissionattributesresponse.md b/customer_portal/docs/models/operations/extrapermissionattributesresponse.md
new file mode 100755
index 000000000..0354214fa
--- /dev/null
+++ b/customer_portal/docs/models/operations/extrapermissionattributesresponse.md
@@ -0,0 +1,12 @@
+# ExtraPermissionAttributesResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `error_resp` | [Optional[shared.ErrorResp]](../../models/shared/errorresp.md) | :heavy_minus_sign: | Internal Server Error |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
+| `extra_permission_attributes_200_application_json_object` | [Optional[ExtraPermissionAttributes200ApplicationJSON]](../../models/operations/extrapermissionattributes200applicationjson.md) | :heavy_minus_sign: | Retrieved extra permission attributes successfully. |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/extrapermissionattributessecurity.md b/customer_portal/docs/models/operations/extrapermissionattributessecurity.md
new file mode 100755
index 000000000..76cf8e353
--- /dev/null
+++ b/customer_portal/docs/models/operations/extrapermissionattributessecurity.md
@@ -0,0 +1,8 @@
+# ExtraPermissionAttributesSecurity
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `epilot_auth` | *str* | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/fetchportalusersbyrelatedentity200applicationjson.md b/customer_portal/docs/models/operations/fetchportalusersbyrelatedentity200applicationjson.md
new file mode 100755
index 000000000..cf349258e
--- /dev/null
+++ b/customer_portal/docs/models/operations/fetchportalusersbyrelatedentity200applicationjson.md
@@ -0,0 +1,10 @@
+# FetchPortalUsersByRelatedEntity200ApplicationJSON
+
+Returns the portal users under the given entity.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ |
+| `portal_users` | List[[shared.PortalUser](../../models/shared/portaluser.md)] | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/fetchportalusersbyrelatedentityrequest.md b/customer_portal/docs/models/operations/fetchportalusersbyrelatedentityrequest.md
new file mode 100755
index 000000000..2994a7a73
--- /dev/null
+++ b/customer_portal/docs/models/operations/fetchportalusersbyrelatedentityrequest.md
@@ -0,0 +1,9 @@
+# FetchPortalUsersByRelatedEntityRequest
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------ | ------------------------------------------------------ | ------------------------------------------------------ | ------------------------------------------------------ | ------------------------------------------------------ |
+| `entity_id` | *str* | :heavy_check_mark: | N/A | 5da0a718-c822-403d-9f5d-20d4584e0528 |
+| `slug` | [shared.EntitySlug](../../models/shared/entityslug.md) | :heavy_check_mark: | URL-friendly identifier for the entity schema | contact |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/fetchportalusersbyrelatedentityresponse.md b/customer_portal/docs/models/operations/fetchportalusersbyrelatedentityresponse.md
new file mode 100755
index 000000000..8af084dab
--- /dev/null
+++ b/customer_portal/docs/models/operations/fetchportalusersbyrelatedentityresponse.md
@@ -0,0 +1,12 @@
+# FetchPortalUsersByRelatedEntityResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `error_resp` | [Optional[shared.ErrorResp]](../../models/shared/errorresp.md) | :heavy_minus_sign: | Could not authenticate the user |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
+| `fetch_portal_users_by_related_entity_200_application_json_object` | [Optional[FetchPortalUsersByRelatedEntity200ApplicationJSON]](../../models/operations/fetchportalusersbyrelatedentity200applicationjson.md) | :heavy_minus_sign: | Returns the portal users under the given entity. |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/fetchportalusersbyrelatedentitysecurity.md b/customer_portal/docs/models/operations/fetchportalusersbyrelatedentitysecurity.md
new file mode 100755
index 000000000..2b6169f74
--- /dev/null
+++ b/customer_portal/docs/models/operations/fetchportalusersbyrelatedentitysecurity.md
@@ -0,0 +1,8 @@
+# FetchPortalUsersByRelatedEntitySecurity
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `epilot_auth` | *str* | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getallcontracts200applicationjson.md b/customer_portal/docs/models/operations/getallcontracts200applicationjson.md
new file mode 100755
index 000000000..113b9b097
--- /dev/null
+++ b/customer_portal/docs/models/operations/getallcontracts200applicationjson.md
@@ -0,0 +1,10 @@
+# GetAllContracts200ApplicationJSON
+
+Contracts have been retrieved successfully.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- |
+| `data` | List[[shared.Contract](../../models/shared/contract.md)] | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getallcontractsrequest.md b/customer_portal/docs/models/operations/getallcontractsrequest.md
new file mode 100755
index 000000000..6a757a699
--- /dev/null
+++ b/customer_portal/docs/models/operations/getallcontractsrequest.md
@@ -0,0 +1,9 @@
+# GetAllContractsRequest
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `from_` | *Optional[float]* | :heavy_minus_sign: | N/A | 0 |
+| `size` | *Optional[float]* | :heavy_minus_sign: | N/A | 100 |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getallcontractsresponse.md b/customer_portal/docs/models/operations/getallcontractsresponse.md
new file mode 100755
index 000000000..f433032a4
--- /dev/null
+++ b/customer_portal/docs/models/operations/getallcontractsresponse.md
@@ -0,0 +1,12 @@
+# GetAllContractsResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `error_resp` | [Optional[shared.ErrorResp]](../../models/shared/errorresp.md) | :heavy_minus_sign: | Could not authenticate the user |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
+| `get_all_contracts_200_application_json_object` | [Optional[GetAllContracts200ApplicationJSON]](../../models/operations/getallcontracts200applicationjson.md) | :heavy_minus_sign: | Contracts have been retrieved successfully. |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getallcontractssecurity.md b/customer_portal/docs/models/operations/getallcontractssecurity.md
new file mode 100755
index 000000000..2747ecee7
--- /dev/null
+++ b/customer_portal/docs/models/operations/getallcontractssecurity.md
@@ -0,0 +1,8 @@
+# GetAllContractsSecurity
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `portal_auth` | *str* | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getallfiles200applicationjson.md b/customer_portal/docs/models/operations/getallfiles200applicationjson.md
new file mode 100755
index 000000000..44b2c786c
--- /dev/null
+++ b/customer_portal/docs/models/operations/getallfiles200applicationjson.md
@@ -0,0 +1,11 @@
+# GetAllFiles200ApplicationJSON
+
+The files have been fetched successfully.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- |
+| `hits` | *Optional[float]* | :heavy_minus_sign: | Total number of files for pagination | 50 |
+| `results` | List[[shared.FileItem](../../models/shared/fileitem.md)] | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getallfilesrequest.md b/customer_portal/docs/models/operations/getallfilesrequest.md
new file mode 100755
index 000000000..54a6b37b3
--- /dev/null
+++ b/customer_portal/docs/models/operations/getallfilesrequest.md
@@ -0,0 +1,10 @@
+# GetAllFilesRequest
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------- | ------------------------------------------------------------------------- | ------------------------------------------------------------------------- | ------------------------------------------------------------------------- | ------------------------------------------------------------------------- |
+| `entity_ids` | List[*str*] | :heavy_minus_sign: | List of entity ids to filter the results | 4910096f-000a-4504-bf5a-d3774ec3032a,7c9f8536-6266-42e8-a0de-c60b61aa81a7 |
+| `from_` | *float* | :heavy_check_mark: | N/A | 0 |
+| `size` | *float* | :heavy_check_mark: | N/A | 0 |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getallfilesresponse.md b/customer_portal/docs/models/operations/getallfilesresponse.md
new file mode 100755
index 000000000..5da07245e
--- /dev/null
+++ b/customer_portal/docs/models/operations/getallfilesresponse.md
@@ -0,0 +1,12 @@
+# GetAllFilesResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `error_resp` | [Optional[shared.ErrorResp]](../../models/shared/errorresp.md) | :heavy_minus_sign: | Could not authenticate the user |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
+| `get_all_files_200_application_json_object` | [Optional[GetAllFiles200ApplicationJSON]](../../models/operations/getallfiles200applicationjson.md) | :heavy_minus_sign: | The files have been fetched successfully. |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getallfilessecurity.md b/customer_portal/docs/models/operations/getallfilessecurity.md
new file mode 100755
index 000000000..253bf5e71
--- /dev/null
+++ b/customer_portal/docs/models/operations/getallfilessecurity.md
@@ -0,0 +1,8 @@
+# GetAllFilesSecurity
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `portal_auth` | *str* | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getallopportunities200applicationjson.md b/customer_portal/docs/models/operations/getallopportunities200applicationjson.md
new file mode 100755
index 000000000..cde064a54
--- /dev/null
+++ b/customer_portal/docs/models/operations/getallopportunities200applicationjson.md
@@ -0,0 +1,10 @@
+# GetAllOpportunities200ApplicationJSON
+
+The opportunities is retrieved successfully for the portal user.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- |
+| `data` | List[[shared.Opportunity](../../models/shared/opportunity.md)] | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getallopportunitiesrequest.md b/customer_portal/docs/models/operations/getallopportunitiesrequest.md
new file mode 100755
index 000000000..f65e6b580
--- /dev/null
+++ b/customer_portal/docs/models/operations/getallopportunitiesrequest.md
@@ -0,0 +1,9 @@
+# GetAllOpportunitiesRequest
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `from_` | *Optional[float]* | :heavy_minus_sign: | N/A | 0 |
+| `size` | *Optional[float]* | :heavy_minus_sign: | N/A | 100 |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getallopportunitiesresponse.md b/customer_portal/docs/models/operations/getallopportunitiesresponse.md
new file mode 100755
index 000000000..cc585c575
--- /dev/null
+++ b/customer_portal/docs/models/operations/getallopportunitiesresponse.md
@@ -0,0 +1,12 @@
+# GetAllOpportunitiesResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `error_resp` | [Optional[shared.ErrorResp]](../../models/shared/errorresp.md) | :heavy_minus_sign: | Could not authenticate the user |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
+| `get_all_opportunities_200_application_json_object` | [Optional[GetAllOpportunities200ApplicationJSON]](../../models/operations/getallopportunities200applicationjson.md) | :heavy_minus_sign: | The opportunities is retrieved successfully for the portal user. |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getallopportunitiessecurity.md b/customer_portal/docs/models/operations/getallopportunitiessecurity.md
new file mode 100755
index 000000000..d6d1884eb
--- /dev/null
+++ b/customer_portal/docs/models/operations/getallopportunitiessecurity.md
@@ -0,0 +1,8 @@
+# GetAllOpportunitiesSecurity
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `portal_auth` | *str* | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getallorders200applicationjson.md b/customer_portal/docs/models/operations/getallorders200applicationjson.md
new file mode 100755
index 000000000..0ec746af0
--- /dev/null
+++ b/customer_portal/docs/models/operations/getallorders200applicationjson.md
@@ -0,0 +1,10 @@
+# GetAllOrders200ApplicationJSON
+
+The orders for the portal user returned successfully.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- |
+| `data` | List[[shared.Order](../../models/shared/order.md)] | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getallordersrequest.md b/customer_portal/docs/models/operations/getallordersrequest.md
new file mode 100755
index 000000000..4dba294c5
--- /dev/null
+++ b/customer_portal/docs/models/operations/getallordersrequest.md
@@ -0,0 +1,9 @@
+# GetAllOrdersRequest
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `from_` | *Optional[float]* | :heavy_minus_sign: | N/A | 0 |
+| `size` | *Optional[float]* | :heavy_minus_sign: | N/A | 100 |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getallordersresponse.md b/customer_portal/docs/models/operations/getallordersresponse.md
new file mode 100755
index 000000000..066513bc7
--- /dev/null
+++ b/customer_portal/docs/models/operations/getallordersresponse.md
@@ -0,0 +1,12 @@
+# GetAllOrdersResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `error_resp` | [Optional[shared.ErrorResp]](../../models/shared/errorresp.md) | :heavy_minus_sign: | Could not authenticate the user |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
+| `get_all_orders_200_application_json_object` | [Optional[GetAllOrders200ApplicationJSON]](../../models/operations/getallorders200applicationjson.md) | :heavy_minus_sign: | The orders for the portal user returned successfully. |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getallorderssecurity.md b/customer_portal/docs/models/operations/getallorderssecurity.md
new file mode 100755
index 000000000..64712a5c5
--- /dev/null
+++ b/customer_portal/docs/models/operations/getallorderssecurity.md
@@ -0,0 +1,8 @@
+# GetAllOrdersSecurity
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `portal_auth` | *str* | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getallportalconfigs200applicationjson.md b/customer_portal/docs/models/operations/getallportalconfigs200applicationjson.md
new file mode 100755
index 000000000..3245cf4ef
--- /dev/null
+++ b/customer_portal/docs/models/operations/getallportalconfigs200applicationjson.md
@@ -0,0 +1,10 @@
+# GetAllPortalConfigs200ApplicationJSON
+
+All portal configs retrieved successfully.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- |
+| `data` | List[[shared.PortalConfig](../../models/shared/portalconfig.md)] | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getallportalconfigsresponse.md b/customer_portal/docs/models/operations/getallportalconfigsresponse.md
new file mode 100755
index 000000000..4d8fe024e
--- /dev/null
+++ b/customer_portal/docs/models/operations/getallportalconfigsresponse.md
@@ -0,0 +1,12 @@
+# GetAllPortalConfigsResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `error_resp` | [Optional[shared.ErrorResp]](../../models/shared/errorresp.md) | :heavy_minus_sign: | Could not authenticate the user |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
+| `get_all_portal_configs_200_application_json_object` | [Optional[GetAllPortalConfigs200ApplicationJSON]](../../models/operations/getallportalconfigs200applicationjson.md) | :heavy_minus_sign: | All portal configs retrieved successfully. |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getallportalconfigssecurity.md b/customer_portal/docs/models/operations/getallportalconfigssecurity.md
new file mode 100755
index 000000000..f0f1c8f86
--- /dev/null
+++ b/customer_portal/docs/models/operations/getallportalconfigssecurity.md
@@ -0,0 +1,8 @@
+# GetAllPortalConfigsSecurity
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `epilot_auth` | *str* | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getbillingevents200applicationjson.md b/customer_portal/docs/models/operations/getbillingevents200applicationjson.md
new file mode 100755
index 000000000..f32ea982d
--- /dev/null
+++ b/customer_portal/docs/models/operations/getbillingevents200applicationjson.md
@@ -0,0 +1,11 @@
+# GetBillingEvents200ApplicationJSON
+
+List billing events for all contracts/orders of specific customer
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ |
+| `hits` | *Optional[float]* | :heavy_minus_sign: | Total number of billing events for pagination | 50 |
+| `results` | List[[Union[shared.InstallmentEvent, shared.BillingEventReimbursementEvent]](../../models/shared/billingevent.md)] | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getbillingeventseventtype.md b/customer_portal/docs/models/operations/getbillingeventseventtype.md
new file mode 100755
index 000000000..4945c4ad1
--- /dev/null
+++ b/customer_portal/docs/models/operations/getbillingeventseventtype.md
@@ -0,0 +1,11 @@
+# GetBillingEventsEventType
+
+Type of billing event to filter by
+
+
+## Values
+
+| Name | Value |
+| --------------- | --------------- |
+| `INSTALLMENT` | installment |
+| `REIMBURSEMENT` | reimbursement |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getbillingeventsrequest.md b/customer_portal/docs/models/operations/getbillingeventsrequest.md
new file mode 100755
index 000000000..a11baae69
--- /dev/null
+++ b/customer_portal/docs/models/operations/getbillingeventsrequest.md
@@ -0,0 +1,12 @@
+# GetBillingEventsRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- |
+| `customer_id` | *str* | :heavy_check_mark: | N/A |
+| `date_after` | [datetime](https://docs.python.org/3/library/datetime.html#datetime-objects) | :heavy_minus_sign: | N/A |
+| `date_before` | [datetime](https://docs.python.org/3/library/datetime.html#datetime-objects) | :heavy_minus_sign: | N/A |
+| `entity_id` | List[*str*] | :heavy_minus_sign: | N/A |
+| `event_type` | List[[GetBillingEventsEventType](../../models/operations/getbillingeventseventtype.md)] | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getbillingeventsresponse.md b/customer_portal/docs/models/operations/getbillingeventsresponse.md
new file mode 100755
index 000000000..578adf578
--- /dev/null
+++ b/customer_portal/docs/models/operations/getbillingeventsresponse.md
@@ -0,0 +1,11 @@
+# GetBillingEventsResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
+| `get_billing_events_200_application_json_object` | [Optional[GetBillingEvents200ApplicationJSON]](../../models/operations/getbillingevents200applicationjson.md) | :heavy_minus_sign: | List billing events for all contracts/orders of specific customer |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getbillingeventssecurity.md b/customer_portal/docs/models/operations/getbillingeventssecurity.md
new file mode 100755
index 000000000..55f438210
--- /dev/null
+++ b/customer_portal/docs/models/operations/getbillingeventssecurity.md
@@ -0,0 +1,8 @@
+# GetBillingEventsSecurity
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `portal_auth` | *str* | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getcontact200applicationjson.md b/customer_portal/docs/models/operations/getcontact200applicationjson.md
new file mode 100755
index 000000000..a6665c1cb
--- /dev/null
+++ b/customer_portal/docs/models/operations/getcontact200applicationjson.md
@@ -0,0 +1,12 @@
+# GetContact200ApplicationJSON
+
+Retrieves the mapped contact of the logged in user successfully.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ |
+| `entity` | [Optional[shared.Contact]](../../models/shared/contact.md) | :heavy_minus_sign: | The mapped contact of the portal user |
+| `files` | List[[shared.File](../../models/shared/file.md)] | :heavy_minus_sign: | N/A |
+| `relations` | List[[shared.EntityItem](../../models/shared/entityitem.md)] | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getcontactcount200applicationjson.md b/customer_portal/docs/models/operations/getcontactcount200applicationjson.md
new file mode 100755
index 000000000..63e005e5c
--- /dev/null
+++ b/customer_portal/docs/models/operations/getcontactcount200applicationjson.md
@@ -0,0 +1,10 @@
+# GetContactCount200ApplicationJSON
+
+Contact count for the request successfully.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `count` | *Optional[float]* | :heavy_minus_sign: | Count of Contact | 2 |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getcontactcountrequest.md b/customer_portal/docs/models/operations/getcontactcountrequest.md
new file mode 100755
index 000000000..701ab90c5
--- /dev/null
+++ b/customer_portal/docs/models/operations/getcontactcountrequest.md
@@ -0,0 +1,9 @@
+# GetContactCountRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ |
+| `contact_count_request` | [shared.ContactCountRequest](../../models/shared/contactcountrequest.md) | :heavy_check_mark: | Request payload |
+| `origin` | [shared.Origin](../../models/shared/origin.md) | :heavy_check_mark: | Origin of the portal |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getcontactcountresponse.md b/customer_portal/docs/models/operations/getcontactcountresponse.md
new file mode 100755
index 000000000..e8a7a80b7
--- /dev/null
+++ b/customer_portal/docs/models/operations/getcontactcountresponse.md
@@ -0,0 +1,12 @@
+# GetContactCountResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `error_resp` | [Optional[shared.ErrorResp]](../../models/shared/errorresp.md) | :heavy_minus_sign: | The request could not be validated |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
+| `get_contact_count_200_application_json_object` | [Optional[GetContactCount200ApplicationJSON]](../../models/operations/getcontactcount200applicationjson.md) | :heavy_minus_sign: | Contact count for the request successfully. |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getcontactresponse.md b/customer_portal/docs/models/operations/getcontactresponse.md
new file mode 100755
index 000000000..dcca393a1
--- /dev/null
+++ b/customer_portal/docs/models/operations/getcontactresponse.md
@@ -0,0 +1,12 @@
+# GetContactResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `error_resp` | [Optional[shared.ErrorResp]](../../models/shared/errorresp.md) | :heavy_minus_sign: | Could not authenticate the user |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
+| `get_contact_200_application_json_object` | [Optional[GetContact200ApplicationJSON]](../../models/operations/getcontact200applicationjson.md) | :heavy_minus_sign: | Retrieves the mapped contact of the logged in user successfully. |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getcontactsecurity.md b/customer_portal/docs/models/operations/getcontactsecurity.md
new file mode 100755
index 000000000..208abba2b
--- /dev/null
+++ b/customer_portal/docs/models/operations/getcontactsecurity.md
@@ -0,0 +1,8 @@
+# GetContactSecurity
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `portal_auth` | *str* | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getcontract200applicationjson.md b/customer_portal/docs/models/operations/getcontract200applicationjson.md
new file mode 100755
index 000000000..d3e16c55e
--- /dev/null
+++ b/customer_portal/docs/models/operations/getcontract200applicationjson.md
@@ -0,0 +1,14 @@
+# GetContract200ApplicationJSON
+
+The requested contract returned successfully.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ |
+| `entity` | [Optional[shared.Contract]](../../models/shared/contract.md) | :heavy_minus_sign: | The contract entity |
+| `files` | List[[shared.File](../../models/shared/file.md)] | :heavy_minus_sign: | The related files of the requested contract |
+| `orders` | List[[shared.Order](../../models/shared/order.md)] | :heavy_minus_sign: | The related orders of the requested contract |
+| `relations` | List[[shared.EntityItem](../../models/shared/entityitem.md)] | :heavy_minus_sign: | The related entities of the requested contract |
+| `workflow` | List[Dict[str, *Any*]] | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getcontractrequest.md b/customer_portal/docs/models/operations/getcontractrequest.md
new file mode 100755
index 000000000..44ce41301
--- /dev/null
+++ b/customer_portal/docs/models/operations/getcontractrequest.md
@@ -0,0 +1,8 @@
+# GetContractRequest
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ |
+| `id` | *str* | :heavy_check_mark: | The ID of the contract | 5da0a718-c822-403d-9f5d-20d4584e0528 |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getcontractresponse.md b/customer_portal/docs/models/operations/getcontractresponse.md
new file mode 100755
index 000000000..2b36c3d17
--- /dev/null
+++ b/customer_portal/docs/models/operations/getcontractresponse.md
@@ -0,0 +1,12 @@
+# GetContractResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `error_resp` | [Optional[shared.ErrorResp]](../../models/shared/errorresp.md) | :heavy_minus_sign: | Could not authenticate the user |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
+| `get_contract_200_application_json_object` | [Optional[GetContract200ApplicationJSON]](../../models/operations/getcontract200applicationjson.md) | :heavy_minus_sign: | The requested contract returned successfully. |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getcontractsecurity.md b/customer_portal/docs/models/operations/getcontractsecurity.md
new file mode 100755
index 000000000..b0ab9cb2a
--- /dev/null
+++ b/customer_portal/docs/models/operations/getcontractsecurity.md
@@ -0,0 +1,8 @@
+# GetContractSecurity
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `portal_auth` | *str* | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getcountbyemail200applicationjson.md b/customer_portal/docs/models/operations/getcountbyemail200applicationjson.md
new file mode 100755
index 000000000..422635c6b
--- /dev/null
+++ b/customer_portal/docs/models/operations/getcountbyemail200applicationjson.md
@@ -0,0 +1,10 @@
+# GetCountByEmail200ApplicationJSON
+
+Contact count for the requested email successfully.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `count` | *Optional[float]* | :heavy_minus_sign: | Count of Contact | 2 |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getcountbyemailrequest.md b/customer_portal/docs/models/operations/getcountbyemailrequest.md
new file mode 100755
index 000000000..ba949760c
--- /dev/null
+++ b/customer_portal/docs/models/operations/getcountbyemailrequest.md
@@ -0,0 +1,9 @@
+# GetCountByEmailRequest
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `email` | *str* | :heavy_check_mark: | N/A | test@test.com |
+| `org_id` | *str* | :heavy_check_mark: | N/A | 123 |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getcountbyemailresponse.md b/customer_portal/docs/models/operations/getcountbyemailresponse.md
new file mode 100755
index 000000000..380d8e277
--- /dev/null
+++ b/customer_portal/docs/models/operations/getcountbyemailresponse.md
@@ -0,0 +1,12 @@
+# GetCountByEmailResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `error_resp` | [Optional[shared.ErrorResp]](../../models/shared/errorresp.md) | :heavy_minus_sign: | Internal Server Error |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
+| `get_count_by_email_200_application_json_object` | [Optional[GetCountByEmail200ApplicationJSON]](../../models/operations/getcountbyemail200applicationjson.md) | :heavy_minus_sign: | Contact count for the requested email successfully. |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getcustomerbalancerequest.md b/customer_portal/docs/models/operations/getcustomerbalancerequest.md
new file mode 100755
index 000000000..bd71faa85
--- /dev/null
+++ b/customer_portal/docs/models/operations/getcustomerbalancerequest.md
@@ -0,0 +1,8 @@
+# GetCustomerBalanceRequest
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------- | --------------------------------------- | --------------------------------------- | --------------------------------------- | --------------------------------------- |
+| `customer_entity_id` | *str* | :heavy_check_mark: | Customer entity ID (contact or account) | 1e3f0d58-69d2-4dbb-9a43-3ee63d862e8e |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getcustomerbalanceresponse.md b/customer_portal/docs/models/operations/getcustomerbalanceresponse.md
new file mode 100755
index 000000000..1ef697536
--- /dev/null
+++ b/customer_portal/docs/models/operations/getcustomerbalanceresponse.md
@@ -0,0 +1,11 @@
+# GetCustomerBalanceResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
+| `balance` | [Optional[shared.Balance]](../../models/shared/balance.md) | :heavy_minus_sign: | OK |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getcustomerbalancesecurity.md b/customer_portal/docs/models/operations/getcustomerbalancesecurity.md
new file mode 100755
index 000000000..7847ae57f
--- /dev/null
+++ b/customer_portal/docs/models/operations/getcustomerbalancesecurity.md
@@ -0,0 +1,8 @@
+# GetCustomerBalanceSecurity
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `epilot_auth` | *str* | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getecpcontact200applicationjson.md b/customer_portal/docs/models/operations/getecpcontact200applicationjson.md
new file mode 100755
index 000000000..ab39f6b01
--- /dev/null
+++ b/customer_portal/docs/models/operations/getecpcontact200applicationjson.md
@@ -0,0 +1,10 @@
+# GetECPContact200ApplicationJSON
+
+The contact returned successfully.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- |
+| `data` | [Optional[shared.Contact]](../../models/shared/contact.md) | :heavy_minus_sign: | The mapped contact of the portal user |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getecpcontactrequest.md b/customer_portal/docs/models/operations/getecpcontactrequest.md
new file mode 100755
index 000000000..f739f1c68
--- /dev/null
+++ b/customer_portal/docs/models/operations/getecpcontactrequest.md
@@ -0,0 +1,8 @@
+# GetECPContactRequest
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `id` | *str* | :heavy_check_mark: | N/A | 1234 |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getecpcontactresponse.md b/customer_portal/docs/models/operations/getecpcontactresponse.md
new file mode 100755
index 000000000..61bd61965
--- /dev/null
+++ b/customer_portal/docs/models/operations/getecpcontactresponse.md
@@ -0,0 +1,12 @@
+# GetECPContactResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `error_resp` | [Optional[shared.ErrorResp]](../../models/shared/errorresp.md) | :heavy_minus_sign: | Could not authenticate the user |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
+| `get_ecp_contact_200_application_json_object` | [Optional[GetECPContact200ApplicationJSON]](../../models/operations/getecpcontact200applicationjson.md) | :heavy_minus_sign: | The contact returned successfully. |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getecpcontactsecurity.md b/customer_portal/docs/models/operations/getecpcontactsecurity.md
new file mode 100755
index 000000000..5ce01e351
--- /dev/null
+++ b/customer_portal/docs/models/operations/getecpcontactsecurity.md
@@ -0,0 +1,8 @@
+# GetECPContactSecurity
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `epilot_auth` | *str* | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getemailtemplatesrequest.md b/customer_portal/docs/models/operations/getemailtemplatesrequest.md
new file mode 100755
index 000000000..42556a9c1
--- /dev/null
+++ b/customer_portal/docs/models/operations/getemailtemplatesrequest.md
@@ -0,0 +1,8 @@
+# GetEmailTemplatesRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- |
+| `origin` | [shared.Origin](../../models/shared/origin.md) | :heavy_check_mark: | Origin of the portal |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getemailtemplatesresponse.md b/customer_portal/docs/models/operations/getemailtemplatesresponse.md
new file mode 100755
index 000000000..ab23dfc33
--- /dev/null
+++ b/customer_portal/docs/models/operations/getemailtemplatesresponse.md
@@ -0,0 +1,12 @@
+# GetEmailTemplatesResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `email_templates` | [Optional[shared.EmailTemplates]](../../models/shared/emailtemplates.md) | :heavy_minus_sign: | Retrieved the email templates successfully. |
+| `error_resp` | [Optional[shared.ErrorResp]](../../models/shared/errorresp.md) | :heavy_minus_sign: | Could not authenticate the user |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getemailtemplatessecurity.md b/customer_portal/docs/models/operations/getemailtemplatessecurity.md
new file mode 100755
index 000000000..bd6883f48
--- /dev/null
+++ b/customer_portal/docs/models/operations/getemailtemplatessecurity.md
@@ -0,0 +1,8 @@
+# GetEmailTemplatesSecurity
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `epilot_auth` | *str* | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getentitiesbyidentifiers200applicationjson.md b/customer_portal/docs/models/operations/getentitiesbyidentifiers200applicationjson.md
new file mode 100755
index 000000000..97df4e76b
--- /dev/null
+++ b/customer_portal/docs/models/operations/getentitiesbyidentifiers200applicationjson.md
@@ -0,0 +1,10 @@
+# GetEntitiesByIdentifiers200ApplicationJSON
+
+The returned Entities
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ |
+| `data` | List[[shared.EntityItem](../../models/shared/entityitem.md)] | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getentitiesbyidentifiersrequest.md b/customer_portal/docs/models/operations/getentitiesbyidentifiersrequest.md
new file mode 100755
index 000000000..b3583e6a3
--- /dev/null
+++ b/customer_portal/docs/models/operations/getentitiesbyidentifiersrequest.md
@@ -0,0 +1,9 @@
+# GetEntitiesByIdentifiersRequest
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------ | ------------------------------------------------------ | ------------------------------------------------------ | ------------------------------------------------------ | ------------------------------------------------------ |
+| `request_body` | Dict[str, *Any*] | :heavy_check_mark: | The entities are retrieved successfully. | |
+| `slug` | [shared.EntitySlug](../../models/shared/entityslug.md) | :heavy_check_mark: | The slug of an entity | contact |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getentitiesbyidentifiersresponse.md b/customer_portal/docs/models/operations/getentitiesbyidentifiersresponse.md
new file mode 100755
index 000000000..4b79dfc66
--- /dev/null
+++ b/customer_portal/docs/models/operations/getentitiesbyidentifiersresponse.md
@@ -0,0 +1,12 @@
+# GetEntitiesByIdentifiersResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `error_resp` | [Optional[shared.ErrorResp]](../../models/shared/errorresp.md) | :heavy_minus_sign: | The request could not be validated |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
+| `get_entities_by_identifiers_200_application_json_object` | [Optional[GetEntitiesByIdentifiers200ApplicationJSON]](../../models/operations/getentitiesbyidentifiers200applicationjson.md) | :heavy_minus_sign: | The returned Entities |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getentitiesbyidentifierssecurity.md b/customer_portal/docs/models/operations/getentitiesbyidentifierssecurity.md
new file mode 100755
index 000000000..4ab00c8bd
--- /dev/null
+++ b/customer_portal/docs/models/operations/getentitiesbyidentifierssecurity.md
@@ -0,0 +1,8 @@
+# GetEntitiesByIdentifiersSecurity
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `portal_auth` | *str* | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getentityactivityfeed200applicationjson.md b/customer_portal/docs/models/operations/getentityactivityfeed200applicationjson.md
new file mode 100755
index 000000000..a19ff44ab
--- /dev/null
+++ b/customer_portal/docs/models/operations/getentityactivityfeed200applicationjson.md
@@ -0,0 +1,11 @@
+# GetEntityActivityFeed200ApplicationJSON
+
+Success
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- |
+| `results` | List[[shared.ActivityItem](../../models/shared/activityitem.md)] | :heavy_minus_sign: | N/A | |
+| `total` | *Optional[int]* | :heavy_minus_sign: | N/A | 1 |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getentityactivityfeedrequest.md b/customer_portal/docs/models/operations/getentityactivityfeedrequest.md
new file mode 100755
index 000000000..4f6335a3c
--- /dev/null
+++ b/customer_portal/docs/models/operations/getentityactivityfeedrequest.md
@@ -0,0 +1,15 @@
+# GetEntityActivityFeedRequest
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- |
+| `after` | [date](https://docs.python.org/3/library/datetime.html#date-objects) | :heavy_minus_sign: | Get activities after this timestamp | |
+| `before` | [date](https://docs.python.org/3/library/datetime.html#date-objects) | :heavy_minus_sign: | get activities before this timestamp | |
+| `from_` | *Optional[int]* | :heavy_minus_sign: | start from page | |
+| `id` | *str* | :heavy_check_mark: | Entity id | 5da0a718-c822-403d-9f5d-20d4584e0528 |
+| `include_relations` | *Optional[bool]* | :heavy_minus_sign: | Include activities from related entities | |
+| `size` | *Optional[int]* | :heavy_minus_sign: | max number of results to return | |
+| `slug` | [shared.EntitySlug](../../models/shared/entityslug.md) | :heavy_check_mark: | Entity Type | contact |
+| `type` | *Optional[str]* | :heavy_minus_sign: | Filter by activity type | SyncActivity |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getentityactivityfeedresponse.md b/customer_portal/docs/models/operations/getentityactivityfeedresponse.md
new file mode 100755
index 000000000..79a167013
--- /dev/null
+++ b/customer_portal/docs/models/operations/getentityactivityfeedresponse.md
@@ -0,0 +1,11 @@
+# GetEntityActivityFeedResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
+| `get_entity_activity_feed_200_application_json_object` | [Optional[GetEntityActivityFeed200ApplicationJSON]](../../models/operations/getentityactivityfeed200applicationjson.md) | :heavy_minus_sign: | Success |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getentityidentifiers200applicationjson.md b/customer_portal/docs/models/operations/getentityidentifiers200applicationjson.md
new file mode 100755
index 000000000..47d80eb50
--- /dev/null
+++ b/customer_portal/docs/models/operations/getentityidentifiers200applicationjson.md
@@ -0,0 +1,10 @@
+# GetEntityIdentifiers200ApplicationJSON
+
+The identifiers of the requested entity returned successfully.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
+| `data` | List[[GetEntityIdentifiers200ApplicationJSONData](../../models/operations/getentityidentifiers200applicationjsondata.md)] | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getentityidentifiers200applicationjsondata.md b/customer_portal/docs/models/operations/getentityidentifiers200applicationjsondata.md
new file mode 100755
index 000000000..9410d0c6f
--- /dev/null
+++ b/customer_portal/docs/models/operations/getentityidentifiers200applicationjsondata.md
@@ -0,0 +1,9 @@
+# GetEntityIdentifiers200ApplicationJSONData
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------- | -------------------------- | -------------------------- | -------------------------- | -------------------------- |
+| `name` | *Optional[str]* | :heavy_minus_sign: | The name of the identifier | contract_number |
+| `type` | *Optional[str]* | :heavy_minus_sign: | The type of the identifier | string |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getentityidentifiersrequest.md b/customer_portal/docs/models/operations/getentityidentifiersrequest.md
new file mode 100755
index 000000000..d5315c4bc
--- /dev/null
+++ b/customer_portal/docs/models/operations/getentityidentifiersrequest.md
@@ -0,0 +1,8 @@
+# GetEntityIdentifiersRequest
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------ | ------------------------------------------------------ | ------------------------------------------------------ | ------------------------------------------------------ | ------------------------------------------------------ |
+| `slug` | [shared.EntitySlug](../../models/shared/entityslug.md) | :heavy_check_mark: | The slug of an entity | contact |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getentityidentifiersresponse.md b/customer_portal/docs/models/operations/getentityidentifiersresponse.md
new file mode 100755
index 000000000..602a3185d
--- /dev/null
+++ b/customer_portal/docs/models/operations/getentityidentifiersresponse.md
@@ -0,0 +1,12 @@
+# GetEntityIdentifiersResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| --------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `error_resp` | [Optional[shared.ErrorResp]](../../models/shared/errorresp.md) | :heavy_minus_sign: | Could not authenticate the user |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
+| `get_entity_identifiers_200_application_json_object` | [Optional[GetEntityIdentifiers200ApplicationJSON]](../../models/operations/getentityidentifiers200applicationjson.md) | :heavy_minus_sign: | The identifiers of the requested entity returned successfully. |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getentityidentifierssecurity.md b/customer_portal/docs/models/operations/getentityidentifierssecurity.md
new file mode 100755
index 000000000..b1a61e24d
--- /dev/null
+++ b/customer_portal/docs/models/operations/getentityidentifierssecurity.md
@@ -0,0 +1,8 @@
+# GetEntityIdentifiersSecurity
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `epilot_auth` | *str* | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getfilebyid200applicationjson.md b/customer_portal/docs/models/operations/getfilebyid200applicationjson.md
new file mode 100755
index 000000000..93522e8e3
--- /dev/null
+++ b/customer_portal/docs/models/operations/getfilebyid200applicationjson.md
@@ -0,0 +1,10 @@
+# GetFileByID200ApplicationJSON
+
+The files have been fetched successfully.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ |
+| `file` | [Optional[shared.FileItem]](../../models/shared/fileitem.md) | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getfilebyidrequest.md b/customer_portal/docs/models/operations/getfilebyidrequest.md
new file mode 100755
index 000000000..a74d83b37
--- /dev/null
+++ b/customer_portal/docs/models/operations/getfilebyidrequest.md
@@ -0,0 +1,8 @@
+# GetFileByIDRequest
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ |
+| `id` | *str* | :heavy_check_mark: | The Id of a file | 5da0a718-c822-403d-9f5d-20d4584e0528 |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getfilebyidresponse.md b/customer_portal/docs/models/operations/getfilebyidresponse.md
new file mode 100755
index 000000000..962865759
--- /dev/null
+++ b/customer_portal/docs/models/operations/getfilebyidresponse.md
@@ -0,0 +1,12 @@
+# GetFileByIDResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `error_resp` | [Optional[shared.ErrorResp]](../../models/shared/errorresp.md) | :heavy_minus_sign: | Could not authenticate the user |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
+| `get_file_by_id_200_application_json_object` | [Optional[GetFileByID200ApplicationJSON]](../../models/operations/getfilebyid200applicationjson.md) | :heavy_minus_sign: | The files have been fetched successfully. |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getfilebyidsecurity.md b/customer_portal/docs/models/operations/getfilebyidsecurity.md
new file mode 100755
index 000000000..3c3c60e88
--- /dev/null
+++ b/customer_portal/docs/models/operations/getfilebyidsecurity.md
@@ -0,0 +1,8 @@
+# GetFileByIDSecurity
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `portal_auth` | *str* | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getfilescountbyentityresponse.md b/customer_portal/docs/models/operations/getfilescountbyentityresponse.md
new file mode 100755
index 000000000..6c132d4cd
--- /dev/null
+++ b/customer_portal/docs/models/operations/getfilescountbyentityresponse.md
@@ -0,0 +1,12 @@
+# GetFilesCountByEntityResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `entity_file_counts` | List[[shared.EntityFileCount](../../models/shared/entityfilecount.md)] | :heavy_minus_sign: | The file counts have been fetched successfully. |
+| `error_resp` | [Optional[shared.ErrorResp]](../../models/shared/errorresp.md) | :heavy_minus_sign: | Could not authenticate the user |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getfilescountbyentitysecurity.md b/customer_portal/docs/models/operations/getfilescountbyentitysecurity.md
new file mode 100755
index 000000000..ee39ccc91
--- /dev/null
+++ b/customer_portal/docs/models/operations/getfilescountbyentitysecurity.md
@@ -0,0 +1,8 @@
+# GetFilesCountByEntitySecurity
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `portal_auth` | *str* | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getopportunity200applicationjson.md b/customer_portal/docs/models/operations/getopportunity200applicationjson.md
new file mode 100755
index 000000000..4c27bad62
--- /dev/null
+++ b/customer_portal/docs/models/operations/getopportunity200applicationjson.md
@@ -0,0 +1,14 @@
+# GetOpportunity200ApplicationJSON
+
+The returned opportunities
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ |
+| `entity` | [Optional[shared.Opportunity]](../../models/shared/opportunity.md) | :heavy_minus_sign: | The opportunity entity |
+| `files` | List[[shared.File](../../models/shared/file.md)] | :heavy_minus_sign: | The related files of the requested opportunity |
+| `orders` | List[[shared.Order](../../models/shared/order.md)] | :heavy_minus_sign: | The related orders of the requested opportunity |
+| `relations` | List[[shared.EntityItem](../../models/shared/entityitem.md)] | :heavy_minus_sign: | The related entities of the requested opportunity |
+| `workflow` | List[Dict[str, *Any*]] | :heavy_minus_sign: | The related workflows of the requested opportunity |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getopportunityrequest.md b/customer_portal/docs/models/operations/getopportunityrequest.md
new file mode 100755
index 000000000..bf49a4120
--- /dev/null
+++ b/customer_portal/docs/models/operations/getopportunityrequest.md
@@ -0,0 +1,8 @@
+# GetOpportunityRequest
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ |
+| `id` | *str* | :heavy_check_mark: | The ID of opportunity | 5da0a718-c822-403d-9f5d-20d4584e0528 |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getopportunityresponse.md b/customer_portal/docs/models/operations/getopportunityresponse.md
new file mode 100755
index 000000000..0a4db27a0
--- /dev/null
+++ b/customer_portal/docs/models/operations/getopportunityresponse.md
@@ -0,0 +1,12 @@
+# GetOpportunityResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `error_resp` | [Optional[shared.ErrorResp]](../../models/shared/errorresp.md) | :heavy_minus_sign: | Could not authenticate the user |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
+| `get_opportunity_200_application_json_object` | [Optional[GetOpportunity200ApplicationJSON]](../../models/operations/getopportunity200applicationjson.md) | :heavy_minus_sign: | The returned opportunities |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getopportunitysecurity.md b/customer_portal/docs/models/operations/getopportunitysecurity.md
new file mode 100755
index 000000000..142935d35
--- /dev/null
+++ b/customer_portal/docs/models/operations/getopportunitysecurity.md
@@ -0,0 +1,8 @@
+# GetOpportunitySecurity
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `portal_auth` | *str* | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getorder200applicationjson.md b/customer_portal/docs/models/operations/getorder200applicationjson.md
new file mode 100755
index 000000000..98b806f7a
--- /dev/null
+++ b/customer_portal/docs/models/operations/getorder200applicationjson.md
@@ -0,0 +1,15 @@
+# GetOrder200ApplicationJSON
+
+The requested order has been retrieved successfully.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ |
+| `cross_sellable_products` | List[[shared.Product](../../models/shared/product.md)] | :heavy_minus_sign: | The related cross sellable products of the requested order |
+| `entity` | [Optional[shared.Order]](../../models/shared/order.md) | :heavy_minus_sign: | The order entity |
+| `files` | List[[shared.File](../../models/shared/file.md)] | :heavy_minus_sign: | The related files of the requested order |
+| `products` | List[[shared.Product](../../models/shared/product.md)] | :heavy_minus_sign: | The related products of the requested order |
+| `relations` | List[[shared.EntityItem](../../models/shared/entityitem.md)] | :heavy_minus_sign: | The related entities of the requested order |
+| `workflow` | List[Dict[str, *Any*]] | :heavy_minus_sign: | The related workflows of the requested order |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getorderrequest.md b/customer_portal/docs/models/operations/getorderrequest.md
new file mode 100755
index 000000000..5dcbb06e4
--- /dev/null
+++ b/customer_portal/docs/models/operations/getorderrequest.md
@@ -0,0 +1,8 @@
+# GetOrderRequest
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ |
+| `id` | *str* | :heavy_check_mark: | The ID of order | 5da0a718-c822-403d-9f5d-20d4584e0528 |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getorderresponse.md b/customer_portal/docs/models/operations/getorderresponse.md
new file mode 100755
index 000000000..da6419160
--- /dev/null
+++ b/customer_portal/docs/models/operations/getorderresponse.md
@@ -0,0 +1,12 @@
+# GetOrderResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `error_resp` | [Optional[shared.ErrorResp]](../../models/shared/errorresp.md) | :heavy_minus_sign: | Could not authenticate the user |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
+| `get_order_200_application_json_object` | [Optional[GetOrder200ApplicationJSON]](../../models/operations/getorder200applicationjson.md) | :heavy_minus_sign: | The requested order has been retrieved successfully. |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getordersecurity.md b/customer_portal/docs/models/operations/getordersecurity.md
new file mode 100755
index 000000000..c1ac1ff73
--- /dev/null
+++ b/customer_portal/docs/models/operations/getordersecurity.md
@@ -0,0 +1,8 @@
+# GetOrderSecurity
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `portal_auth` | *str* | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getorganizationsettings200applicationjson.md b/customer_portal/docs/models/operations/getorganizationsettings200applicationjson.md
new file mode 100755
index 000000000..97b440f2e
--- /dev/null
+++ b/customer_portal/docs/models/operations/getorganizationsettings200applicationjson.md
@@ -0,0 +1,10 @@
+# GetOrganizationSettings200ApplicationJSON
+
+Retrieved the settings for an organization successfully.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ |
+| `data` | [Optional[shared.OrganizationSettings]](../../models/shared/organizationsettings.md) | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getorganizationsettingsresponse.md b/customer_portal/docs/models/operations/getorganizationsettingsresponse.md
new file mode 100755
index 000000000..78d09f0ea
--- /dev/null
+++ b/customer_portal/docs/models/operations/getorganizationsettingsresponse.md
@@ -0,0 +1,12 @@
+# GetOrganizationSettingsResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| --------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `error_resp` | [Optional[shared.ErrorResp]](../../models/shared/errorresp.md) | :heavy_minus_sign: | Could not authenticate the user |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
+| `get_organization_settings_200_application_json_object` | [Optional[GetOrganizationSettings200ApplicationJSON]](../../models/operations/getorganizationsettings200applicationjson.md) | :heavy_minus_sign: | Retrieved the settings for an organization successfully. |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getorganizationsettingssecurity.md b/customer_portal/docs/models/operations/getorganizationsettingssecurity.md
new file mode 100755
index 000000000..52c0458cd
--- /dev/null
+++ b/customer_portal/docs/models/operations/getorganizationsettingssecurity.md
@@ -0,0 +1,8 @@
+# GetOrganizationSettingsSecurity
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `portal_auth` | *str* | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getorgportalconfigrequest.md b/customer_portal/docs/models/operations/getorgportalconfigrequest.md
new file mode 100755
index 000000000..0ec918976
--- /dev/null
+++ b/customer_portal/docs/models/operations/getorgportalconfigrequest.md
@@ -0,0 +1,8 @@
+# GetOrgPortalConfigRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- |
+| `origin` | [shared.Origin](../../models/shared/origin.md) | :heavy_check_mark: | Origin of the portal |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getorgportalconfigresponse.md b/customer_portal/docs/models/operations/getorgportalconfigresponse.md
new file mode 100755
index 000000000..09cf5537c
--- /dev/null
+++ b/customer_portal/docs/models/operations/getorgportalconfigresponse.md
@@ -0,0 +1,12 @@
+# GetOrgPortalConfigResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `error_resp` | [Optional[shared.ErrorResp]](../../models/shared/errorresp.md) | :heavy_minus_sign: | Could not authenticate the user |
+| `portal_config` | [Optional[shared.PortalConfig]](../../models/shared/portalconfig.md) | :heavy_minus_sign: | Portal config retrieved successfully. |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getorgportalconfigsecurity.md b/customer_portal/docs/models/operations/getorgportalconfigsecurity.md
new file mode 100755
index 000000000..32e76cbc6
--- /dev/null
+++ b/customer_portal/docs/models/operations/getorgportalconfigsecurity.md
@@ -0,0 +1,8 @@
+# GetOrgPortalConfigSecurity
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `epilot_auth` | *str* | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getportalconfigbydomainrequest.md b/customer_portal/docs/models/operations/getportalconfigbydomainrequest.md
new file mode 100755
index 000000000..4ee811e1f
--- /dev/null
+++ b/customer_portal/docs/models/operations/getportalconfigbydomainrequest.md
@@ -0,0 +1,8 @@
+# GetPortalConfigByDomainRequest
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `domain` | *str* | :heavy_check_mark: | N/A | example.com |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getportalconfigbydomainresponse.md b/customer_portal/docs/models/operations/getportalconfigbydomainresponse.md
new file mode 100755
index 000000000..6e6bd8004
--- /dev/null
+++ b/customer_portal/docs/models/operations/getportalconfigbydomainresponse.md
@@ -0,0 +1,12 @@
+# GetPortalConfigByDomainResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `error_resp` | [Optional[shared.ErrorResp]](../../models/shared/errorresp.md) | :heavy_minus_sign: | Internal Server Error |
+| `portal_config` | [Optional[shared.PortalConfig]](../../models/shared/portalconfig.md) | :heavy_minus_sign: | Portal config retrieved successfully. |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getportalconfigrequest.md b/customer_portal/docs/models/operations/getportalconfigrequest.md
new file mode 100755
index 000000000..d325d4206
--- /dev/null
+++ b/customer_portal/docs/models/operations/getportalconfigrequest.md
@@ -0,0 +1,8 @@
+# GetPortalConfigRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- |
+| `origin` | [Optional[shared.Origin]](../../models/shared/origin.md) | :heavy_minus_sign: | Origin of the portal |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getportalconfigresponse.md b/customer_portal/docs/models/operations/getportalconfigresponse.md
new file mode 100755
index 000000000..1f3a01469
--- /dev/null
+++ b/customer_portal/docs/models/operations/getportalconfigresponse.md
@@ -0,0 +1,12 @@
+# GetPortalConfigResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `error_resp` | [Optional[shared.ErrorResp]](../../models/shared/errorresp.md) | :heavy_minus_sign: | Could not authenticate the user |
+| `portal_config` | [Optional[shared.PortalConfig]](../../models/shared/portalconfig.md) | :heavy_minus_sign: | Portal config retrieved successfully. |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getportalconfigsecurity.md b/customer_portal/docs/models/operations/getportalconfigsecurity.md
new file mode 100755
index 000000000..2a642bf6e
--- /dev/null
+++ b/customer_portal/docs/models/operations/getportalconfigsecurity.md
@@ -0,0 +1,9 @@
+# GetPortalConfigSecurity
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `epilot_auth` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `portal_auth` | *Optional[str]* | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getportaluser200applicationjson.md b/customer_portal/docs/models/operations/getportaluser200applicationjson.md
new file mode 100755
index 000000000..356266ba4
--- /dev/null
+++ b/customer_portal/docs/models/operations/getportaluser200applicationjson.md
@@ -0,0 +1,10 @@
+# GetPortalUser200ApplicationJSON
+
+Portal user returned successfully.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- |
+| `data` | [Optional[shared.PortalUser]](../../models/shared/portaluser.md) | :heavy_minus_sign: | The portal user entity |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getportaluserresponse.md b/customer_portal/docs/models/operations/getportaluserresponse.md
new file mode 100755
index 000000000..0c826eb24
--- /dev/null
+++ b/customer_portal/docs/models/operations/getportaluserresponse.md
@@ -0,0 +1,12 @@
+# GetPortalUserResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `error_resp` | [Optional[shared.ErrorResp]](../../models/shared/errorresp.md) | :heavy_minus_sign: | Could not authenticate the user |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
+| `get_portal_user_200_application_json_object` | [Optional[GetPortalUser200ApplicationJSON]](../../models/operations/getportaluser200applicationjson.md) | :heavy_minus_sign: | Portal user returned successfully. |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getportalusersecurity.md b/customer_portal/docs/models/operations/getportalusersecurity.md
new file mode 100755
index 000000000..b07637f14
--- /dev/null
+++ b/customer_portal/docs/models/operations/getportalusersecurity.md
@@ -0,0 +1,8 @@
+# GetPortalUserSecurity
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `portal_auth` | *str* | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getportalwidgetsrequest.md b/customer_portal/docs/models/operations/getportalwidgetsrequest.md
new file mode 100755
index 000000000..705a91ceb
--- /dev/null
+++ b/customer_portal/docs/models/operations/getportalwidgetsrequest.md
@@ -0,0 +1,8 @@
+# GetPortalWidgetsRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- |
+| `origin` | [Optional[shared.Origin]](../../models/shared/origin.md) | :heavy_minus_sign: | Origin of the portal |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getportalwidgetsresponse.md b/customer_portal/docs/models/operations/getportalwidgetsresponse.md
new file mode 100755
index 000000000..f44f3351f
--- /dev/null
+++ b/customer_portal/docs/models/operations/getportalwidgetsresponse.md
@@ -0,0 +1,12 @@
+# GetPortalWidgetsResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `error_resp` | [Optional[shared.ErrorResp]](../../models/shared/errorresp.md) | :heavy_minus_sign: | Could not authenticate the user |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
+| `upsert_portal_widget` | [Optional[shared.UpsertPortalWidget]](../../models/shared/upsertportalwidget.md) | :heavy_minus_sign: | Retrieved the portal widgets successfully. |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getportalwidgetssecurity.md b/customer_portal/docs/models/operations/getportalwidgetssecurity.md
new file mode 100755
index 000000000..8a573140a
--- /dev/null
+++ b/customer_portal/docs/models/operations/getportalwidgetssecurity.md
@@ -0,0 +1,9 @@
+# GetPortalWidgetsSecurity
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `epilot_auth` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `portal_auth` | *Optional[str]* | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getpublicportalconfigrequest.md b/customer_portal/docs/models/operations/getpublicportalconfigrequest.md
new file mode 100755
index 000000000..af8275a9a
--- /dev/null
+++ b/customer_portal/docs/models/operations/getpublicportalconfigrequest.md
@@ -0,0 +1,9 @@
+# GetPublicPortalConfigRequest
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- |
+| `org_id` | *str* | :heavy_check_mark: | N/A | 12324 |
+| `origin` | [shared.Origin](../../models/shared/origin.md) | :heavy_check_mark: | Origin of the portal | |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getpublicportalconfigresponse.md b/customer_portal/docs/models/operations/getpublicportalconfigresponse.md
new file mode 100755
index 000000000..4bc942eec
--- /dev/null
+++ b/customer_portal/docs/models/operations/getpublicportalconfigresponse.md
@@ -0,0 +1,12 @@
+# GetPublicPortalConfigResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `error_resp` | [Optional[shared.ErrorResp]](../../models/shared/errorresp.md) | :heavy_minus_sign: | Internal Server Error |
+| `portal_config` | [Optional[shared.PortalConfig]](../../models/shared/portalconfig.md) | :heavy_minus_sign: | Portal config retrieved successfully. |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getpublicportalwidgetsrequest.md b/customer_portal/docs/models/operations/getpublicportalwidgetsrequest.md
new file mode 100755
index 000000000..53b069e32
--- /dev/null
+++ b/customer_portal/docs/models/operations/getpublicportalwidgetsrequest.md
@@ -0,0 +1,9 @@
+# GetPublicPortalWidgetsRequest
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- |
+| `org_id` | *str* | :heavy_check_mark: | N/A | 123 |
+| `origin` | [shared.Origin](../../models/shared/origin.md) | :heavy_check_mark: | Origin of the portal | |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getpublicportalwidgetsresponse.md b/customer_portal/docs/models/operations/getpublicportalwidgetsresponse.md
new file mode 100755
index 000000000..3f9fa9c3c
--- /dev/null
+++ b/customer_portal/docs/models/operations/getpublicportalwidgetsresponse.md
@@ -0,0 +1,12 @@
+# GetPublicPortalWidgetsResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `error_resp` | [Optional[shared.ErrorResp]](../../models/shared/errorresp.md) | :heavy_minus_sign: | Could not authenticate the user |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
+| `upsert_portal_widget` | [Optional[shared.UpsertPortalWidget]](../../models/shared/upsertportalwidget.md) | :heavy_minus_sign: | Retrieved the portal public widgets successfully. |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getschemas200applicationjson.md b/customer_portal/docs/models/operations/getschemas200applicationjson.md
new file mode 100755
index 000000000..21018393c
--- /dev/null
+++ b/customer_portal/docs/models/operations/getschemas200applicationjson.md
@@ -0,0 +1,10 @@
+# GetSchemas200ApplicationJSON
+
+Retrieved schemas for an organization successfully.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------- | ---------------------------------------------------- | ---------------------------------------------------- | ---------------------------------------------------- |
+| `schemas` | List[[shared.Schema](../../models/shared/schema.md)] | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getschemasresponse.md b/customer_portal/docs/models/operations/getschemasresponse.md
new file mode 100755
index 000000000..fd247dc28
--- /dev/null
+++ b/customer_portal/docs/models/operations/getschemasresponse.md
@@ -0,0 +1,12 @@
+# GetSchemasResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `error_resp` | [Optional[shared.ErrorResp]](../../models/shared/errorresp.md) | :heavy_minus_sign: | Could not authenticate the user |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
+| `get_schemas_200_application_json_object` | [Optional[GetSchemas200ApplicationJSON]](../../models/operations/getschemas200applicationjson.md) | :heavy_minus_sign: | Retrieved schemas for an organization successfully. |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getschemassecurity.md b/customer_portal/docs/models/operations/getschemassecurity.md
new file mode 100755
index 000000000..8862341f3
--- /dev/null
+++ b/customer_portal/docs/models/operations/getschemassecurity.md
@@ -0,0 +1,8 @@
+# GetSchemasSecurity
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `portal_auth` | *str* | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getvalidsecondaryattributes200applicationjson.md b/customer_portal/docs/models/operations/getvalidsecondaryattributes200applicationjson.md
new file mode 100755
index 000000000..c4e79f82e
--- /dev/null
+++ b/customer_portal/docs/models/operations/getvalidsecondaryattributes200applicationjson.md
@@ -0,0 +1,10 @@
+# GetValidSecondaryAttributes200ApplicationJSON
+
+Valid secondary attributes for the contact entity are returned successfully.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| --------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- |
+| `data` | List[[GetValidSecondaryAttributes200ApplicationJSONData](../../models/operations/getvalidsecondaryattributes200applicationjsondata.md)] | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getvalidsecondaryattributes200applicationjsondata.md b/customer_portal/docs/models/operations/getvalidsecondaryattributes200applicationjsondata.md
new file mode 100755
index 000000000..6acb442c4
--- /dev/null
+++ b/customer_portal/docs/models/operations/getvalidsecondaryattributes200applicationjsondata.md
@@ -0,0 +1,9 @@
+# GetValidSecondaryAttributes200ApplicationJSONData
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- |
+| `name` | *Optional[str]* | :heavy_minus_sign: | Name of the secondary attribute | first_name |
+| `type` | *Optional[str]* | :heavy_minus_sign: | Type of the secondary attribute | string |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getvalidsecondaryattributesresponse.md b/customer_portal/docs/models/operations/getvalidsecondaryattributesresponse.md
new file mode 100755
index 000000000..c7b9dace4
--- /dev/null
+++ b/customer_portal/docs/models/operations/getvalidsecondaryattributesresponse.md
@@ -0,0 +1,12 @@
+# GetValidSecondaryAttributesResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `error_resp` | [Optional[shared.ErrorResp]](../../models/shared/errorresp.md) | :heavy_minus_sign: | Could not authenticate the user |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
+| `get_valid_secondary_attributes_200_application_json_object` | [Optional[GetValidSecondaryAttributes200ApplicationJSON]](../../models/operations/getvalidsecondaryattributes200applicationjson.md) | :heavy_minus_sign: | Valid secondary attributes for the contact entity are returned successfully. |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/getvalidsecondaryattributessecurity.md b/customer_portal/docs/models/operations/getvalidsecondaryattributessecurity.md
new file mode 100755
index 000000000..e9d8448dc
--- /dev/null
+++ b/customer_portal/docs/models/operations/getvalidsecondaryattributessecurity.md
@@ -0,0 +1,8 @@
+# GetValidSecondaryAttributesSecurity
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `epilot_auth` | *str* | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/logintoportalasuser200applicationjson.md b/customer_portal/docs/models/operations/logintoportalasuser200applicationjson.md
new file mode 100755
index 000000000..39cf4565f
--- /dev/null
+++ b/customer_portal/docs/models/operations/logintoportalasuser200applicationjson.md
@@ -0,0 +1,10 @@
+# LoginToPortalAsUser200ApplicationJSON
+
+The token has been generated successfully.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- |
+| `login_as_token` | *Optional[str]* | :heavy_minus_sign: | A generated login_as_token to log in to a portal impersonating a user. |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/logintoportalasuserrequestbody.md b/customer_portal/docs/models/operations/logintoportalasuserrequestbody.md
new file mode 100755
index 000000000..1d17803cc
--- /dev/null
+++ b/customer_portal/docs/models/operations/logintoportalasuserrequestbody.md
@@ -0,0 +1,11 @@
+# LoginToPortalAsUserRequestBody
+
+The request body to log in to a portal impersonating a user
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- |
+| `email` | *Optional[str]* | :heavy_minus_sign: | The email address of the user to log in as | portal-customer@email.com |
+| `origin` | [Optional[shared.Origin]](../../models/shared/origin.md) | :heavy_minus_sign: | Origin of the portal | |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/logintoportalasuserresponse.md b/customer_portal/docs/models/operations/logintoportalasuserresponse.md
new file mode 100755
index 000000000..d50f1d5af
--- /dev/null
+++ b/customer_portal/docs/models/operations/logintoportalasuserresponse.md
@@ -0,0 +1,11 @@
+# LoginToPortalAsUserResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
+| `login_to_portal_as_user_200_application_json_object` | [Optional[LoginToPortalAsUser200ApplicationJSON]](../../models/operations/logintoportalasuser200applicationjson.md) | :heavy_minus_sign: | The token has been generated successfully. |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/logintoportalasusersecurity.md b/customer_portal/docs/models/operations/logintoportalasusersecurity.md
new file mode 100755
index 000000000..63c4fb93b
--- /dev/null
+++ b/customer_portal/docs/models/operations/logintoportalasusersecurity.md
@@ -0,0 +1,8 @@
+# LoginToPortalAsUserSecurity
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `epilot_auth` | *str* | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/replaceecptemplatevariables200applicationjson.md b/customer_portal/docs/models/operations/replaceecptemplatevariables200applicationjson.md
new file mode 100755
index 000000000..9cfbd9127
--- /dev/null
+++ b/customer_portal/docs/models/operations/replaceecptemplatevariables200applicationjson.md
@@ -0,0 +1,11 @@
+# ReplaceECPTemplateVariables200ApplicationJSON
+
+Replaced portal template variables successfully.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `customer_portal` | [Optional[ReplaceECPTemplateVariables200ApplicationJSONCustomerPortal]](../../models/operations/replaceecptemplatevariables200applicationjsoncustomerportal.md) | :heavy_minus_sign: | N/A |
+| `installer_portal` | [Optional[ReplaceECPTemplateVariables200ApplicationJSONInstallerPortal]](../../models/operations/replaceecptemplatevariables200applicationjsoninstallerportal.md) | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/replaceecptemplatevariables200applicationjsoncustomerportal.md b/customer_portal/docs/models/operations/replaceecptemplatevariables200applicationjsoncustomerportal.md
new file mode 100755
index 000000000..4dee94a5d
--- /dev/null
+++ b/customer_portal/docs/models/operations/replaceecptemplatevariables200applicationjsoncustomerportal.md
@@ -0,0 +1,8 @@
+# ReplaceECPTemplateVariables200ApplicationJSONCustomerPortal
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ |
+| `invitation_link` | *Optional[str]* | :heavy_minus_sign: | N/A | https://end-customer-portal.ecp.dev.epilot.io/register?contactId=7aa44fb8-d60e-40cc-9a3a-ba09a1ff7f51&email=john@doe.com |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/replaceecptemplatevariables200applicationjsoninstallerportal.md b/customer_portal/docs/models/operations/replaceecptemplatevariables200applicationjsoninstallerportal.md
new file mode 100755
index 000000000..c91f19c6c
--- /dev/null
+++ b/customer_portal/docs/models/operations/replaceecptemplatevariables200applicationjsoninstallerportal.md
@@ -0,0 +1,8 @@
+# ReplaceECPTemplateVariables200ApplicationJSONInstallerPortal
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- |
+| `invitation_link` | *Optional[str]* | :heavy_minus_sign: | N/A | https://installer-portal.ecp.dev.epilot.io/register?contactId=7aa44fb8-d60e-40cc-9a3a-ba09a1ff7f51&email=john@doe.com |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/replaceecptemplatevariablesrequestbody.md b/customer_portal/docs/models/operations/replaceecptemplatevariablesrequestbody.md
new file mode 100755
index 000000000..9d6675ab9
--- /dev/null
+++ b/customer_portal/docs/models/operations/replaceecptemplatevariablesrequestbody.md
@@ -0,0 +1,10 @@
+# ReplaceECPTemplateVariablesRequestBody
+
+ECPVariables payload
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ |
+| `contact_id` | *Optional[str]* | :heavy_minus_sign: | ID of the contact | 7aa44fb8-d60e-40cc-9a3a-ba09a1ff7f51 |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/replaceecptemplatevariablesresponse.md b/customer_portal/docs/models/operations/replaceecptemplatevariablesresponse.md
new file mode 100755
index 000000000..072babe3c
--- /dev/null
+++ b/customer_portal/docs/models/operations/replaceecptemplatevariablesresponse.md
@@ -0,0 +1,12 @@
+# ReplaceECPTemplateVariablesResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `error_resp` | [Optional[shared.ErrorResp]](../../models/shared/errorresp.md) | :heavy_minus_sign: | Could not authenticate the user |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
+| `replace_ecp_template_variables_200_application_json_object` | [Optional[ReplaceECPTemplateVariables200ApplicationJSON]](../../models/operations/replaceecptemplatevariables200applicationjson.md) | :heavy_minus_sign: | Replaced portal template variables successfully. |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/replaceecptemplatevariablessecurity.md b/customer_portal/docs/models/operations/replaceecptemplatevariablessecurity.md
new file mode 100755
index 000000000..5ad90c80a
--- /dev/null
+++ b/customer_portal/docs/models/operations/replaceecptemplatevariablessecurity.md
@@ -0,0 +1,8 @@
+# ReplaceECPTemplateVariablesSecurity
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `epilot_auth` | *str* | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/saveentityfile201applicationjson.md b/customer_portal/docs/models/operations/saveentityfile201applicationjson.md
new file mode 100755
index 000000000..5f7e4f3cb
--- /dev/null
+++ b/customer_portal/docs/models/operations/saveentityfile201applicationjson.md
@@ -0,0 +1,10 @@
+# SaveEntityFile201ApplicationJSON
+
+The files have been saved to the entitiy successfully.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------ | ------------------------------------------------ | ------------------------------------------------ | ------------------------------------------------ |
+| `created_files` | List[[shared.File](../../models/shared/file.md)] | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/saveentityfileresponse.md b/customer_portal/docs/models/operations/saveentityfileresponse.md
new file mode 100755
index 000000000..247318513
--- /dev/null
+++ b/customer_portal/docs/models/operations/saveentityfileresponse.md
@@ -0,0 +1,12 @@
+# SaveEntityFileResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `error_resp` | [Optional[shared.ErrorResp]](../../models/shared/errorresp.md) | :heavy_minus_sign: | The request could not be validated |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
+| `save_entity_file_201_application_json_object` | [Optional[SaveEntityFile201ApplicationJSON]](../../models/operations/saveentityfile201applicationjson.md) | :heavy_minus_sign: | The files have been saved to the entitiy successfully. |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/saveentityfilesecurity.md b/customer_portal/docs/models/operations/saveentityfilesecurity.md
new file mode 100755
index 000000000..da79e628a
--- /dev/null
+++ b/customer_portal/docs/models/operations/saveentityfilesecurity.md
@@ -0,0 +1,8 @@
+# SaveEntityFileSecurity
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `portal_auth` | *str* | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/saveportalfiles201applicationjson.md b/customer_portal/docs/models/operations/saveportalfiles201applicationjson.md
new file mode 100755
index 000000000..d7df36407
--- /dev/null
+++ b/customer_portal/docs/models/operations/saveportalfiles201applicationjson.md
@@ -0,0 +1,10 @@
+# SavePortalFiles201ApplicationJSON
+
+The files have been saved to the portal successfully.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------ | ------------------------------------------------ | ------------------------------------------------ | ------------------------------------------------ |
+| `created_files` | List[[shared.File](../../models/shared/file.md)] | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/saveportalfilesresponse.md b/customer_portal/docs/models/operations/saveportalfilesresponse.md
new file mode 100755
index 000000000..a041eb11b
--- /dev/null
+++ b/customer_portal/docs/models/operations/saveportalfilesresponse.md
@@ -0,0 +1,12 @@
+# SavePortalFilesResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `error_resp` | [Optional[shared.ErrorResp]](../../models/shared/errorresp.md) | :heavy_minus_sign: | The request could not be validated |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
+| `save_portal_files_201_application_json_object` | [Optional[SavePortalFiles201ApplicationJSON]](../../models/operations/saveportalfiles201applicationjson.md) | :heavy_minus_sign: | The files have been saved to the portal successfully. |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/saveportalfilessecurity.md b/customer_portal/docs/models/operations/saveportalfilessecurity.md
new file mode 100755
index 000000000..f0a9a24bc
--- /dev/null
+++ b/customer_portal/docs/models/operations/saveportalfilessecurity.md
@@ -0,0 +1,8 @@
+# SavePortalFilesSecurity
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `epilot_auth` | *str* | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/trackfiledownloaded200applicationjson.md b/customer_portal/docs/models/operations/trackfiledownloaded200applicationjson.md
new file mode 100755
index 000000000..ae4274cde
--- /dev/null
+++ b/customer_portal/docs/models/operations/trackfiledownloaded200applicationjson.md
@@ -0,0 +1,10 @@
+# TrackFileDownloaded200ApplicationJSON
+
+File download tracked successfully.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ |
+| `file` | [Optional[shared.FileItem]](../../models/shared/fileitem.md) | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/trackfiledownloadedrequest.md b/customer_portal/docs/models/operations/trackfiledownloadedrequest.md
new file mode 100755
index 000000000..af81c1011
--- /dev/null
+++ b/customer_portal/docs/models/operations/trackfiledownloadedrequest.md
@@ -0,0 +1,8 @@
+# TrackFileDownloadedRequest
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ |
+| `id` | *str* | :heavy_check_mark: | The Id of a file | 5da0a718-c822-403d-9f5d-20d4584e0528 |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/trackfiledownloadedresponse.md b/customer_portal/docs/models/operations/trackfiledownloadedresponse.md
new file mode 100755
index 000000000..bc6167509
--- /dev/null
+++ b/customer_portal/docs/models/operations/trackfiledownloadedresponse.md
@@ -0,0 +1,12 @@
+# TrackFileDownloadedResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `error_resp` | [Optional[shared.ErrorResp]](../../models/shared/errorresp.md) | :heavy_minus_sign: | Could not authenticate the user |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
+| `track_file_downloaded_200_application_json_object` | [Optional[TrackFileDownloaded200ApplicationJSON]](../../models/operations/trackfiledownloaded200applicationjson.md) | :heavy_minus_sign: | File download tracked successfully. |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/trackfiledownloadedsecurity.md b/customer_portal/docs/models/operations/trackfiledownloadedsecurity.md
new file mode 100755
index 000000000..3860900ca
--- /dev/null
+++ b/customer_portal/docs/models/operations/trackfiledownloadedsecurity.md
@@ -0,0 +1,8 @@
+# TrackFileDownloadedSecurity
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `portal_auth` | *str* | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/triggerentityaccess200applicationjson.md b/customer_portal/docs/models/operations/triggerentityaccess200applicationjson.md
new file mode 100755
index 000000000..6cc6c9caf
--- /dev/null
+++ b/customer_portal/docs/models/operations/triggerentityaccess200applicationjson.md
@@ -0,0 +1,10 @@
+# TriggerEntityAccess200ApplicationJSON
+
+The event has been triggered successfully.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------ | ------------------ | ------------------ | ------------------ |
+| `event_id` | *Optional[str]* | :heavy_minus_sign: | Event ID |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/triggerentityaccessrequest.md b/customer_portal/docs/models/operations/triggerentityaccessrequest.md
new file mode 100755
index 000000000..6f85eae57
--- /dev/null
+++ b/customer_portal/docs/models/operations/triggerentityaccessrequest.md
@@ -0,0 +1,9 @@
+# TriggerEntityAccessRequest
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ |
+| `entity_id` | *Optional[str]* | :heavy_minus_sign: | entity ID | 1e3f0d58-69d2-4dbb-9a43-3ee63d862e8e |
+| `schema` | *Optional[str]* | :heavy_minus_sign: | entity schema | contract |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/triggerentityaccessresponse.md b/customer_portal/docs/models/operations/triggerentityaccessresponse.md
new file mode 100755
index 000000000..592085579
--- /dev/null
+++ b/customer_portal/docs/models/operations/triggerentityaccessresponse.md
@@ -0,0 +1,11 @@
+# TriggerEntityAccessResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
+| `trigger_entity_access_200_application_json_object` | [Optional[TriggerEntityAccess200ApplicationJSON]](../../models/operations/triggerentityaccess200applicationjson.md) | :heavy_minus_sign: | The event has been triggered successfully. |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/triggerentityaccesssecurity.md b/customer_portal/docs/models/operations/triggerentityaccesssecurity.md
new file mode 100755
index 000000000..653329bd0
--- /dev/null
+++ b/customer_portal/docs/models/operations/triggerentityaccesssecurity.md
@@ -0,0 +1,8 @@
+# TriggerEntityAccessSecurity
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `portal_auth` | *str* | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/updatecontact200applicationjson.md b/customer_portal/docs/models/operations/updatecontact200applicationjson.md
new file mode 100755
index 000000000..7b59a927a
--- /dev/null
+++ b/customer_portal/docs/models/operations/updatecontact200applicationjson.md
@@ -0,0 +1,10 @@
+# UpdateContact200ApplicationJSON
+
+Updated the contact details successfully.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- |
+| `data` | [Optional[shared.Contact]](../../models/shared/contact.md) | :heavy_minus_sign: | The mapped contact of the portal user |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/updatecontact403applicationjson.md b/customer_portal/docs/models/operations/updatecontact403applicationjson.md
new file mode 100755
index 000000000..1ebdec748
--- /dev/null
+++ b/customer_portal/docs/models/operations/updatecontact403applicationjson.md
@@ -0,0 +1,19 @@
+# UpdateContact403ApplicationJSON
+
+The user is not allowed to access this resource
+
+
+## Supported Types
+
+### ErrorResp
+
+```python
+updateContact403ApplicationJSON: shared.ErrorResp = /* values here */
+```
+
+### FailedRuleErrorResp
+
+```python
+updateContact403ApplicationJSON: shared.FailedRuleErrorResp = /* values here */
+```
+
diff --git a/customer_portal/docs/models/operations/updatecontactresponse.md b/customer_portal/docs/models/operations/updatecontactresponse.md
new file mode 100755
index 000000000..9daf55d83
--- /dev/null
+++ b/customer_portal/docs/models/operations/updatecontactresponse.md
@@ -0,0 +1,13 @@
+# UpdateContactResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| --------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `error_resp` | [Optional[shared.ErrorResp]](../../models/shared/errorresp.md) | :heavy_minus_sign: | Could not authenticate the user |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
+| `update_contact_200_application_json_object` | [Optional[UpdateContact200ApplicationJSON]](../../models/operations/updatecontact200applicationjson.md) | :heavy_minus_sign: | Updated the contact details successfully. |
+| `update_contact_403_application_json_one_of` | [Optional[Union[shared.ErrorResp, shared.FailedRuleErrorResp]]](../../models/operations/updatecontact403applicationjson.md) | :heavy_minus_sign: | The user is not allowed to access this resource |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/updatecontactsecurity.md b/customer_portal/docs/models/operations/updatecontactsecurity.md
new file mode 100755
index 000000000..0090c61b3
--- /dev/null
+++ b/customer_portal/docs/models/operations/updatecontactsecurity.md
@@ -0,0 +1,8 @@
+# UpdateContactSecurity
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `portal_auth` | *str* | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/updatecontract200applicationjson.md b/customer_portal/docs/models/operations/updatecontract200applicationjson.md
new file mode 100755
index 000000000..b6f3e711a
--- /dev/null
+++ b/customer_portal/docs/models/operations/updatecontract200applicationjson.md
@@ -0,0 +1,10 @@
+# UpdateContract200ApplicationJSON
+
+Updated the contract successfully.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ |
+| `data` | [Optional[shared.Contract]](../../models/shared/contract.md) | :heavy_minus_sign: | The contract entity |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/updatecontract403applicationjson.md b/customer_portal/docs/models/operations/updatecontract403applicationjson.md
new file mode 100755
index 000000000..59408c3b0
--- /dev/null
+++ b/customer_portal/docs/models/operations/updatecontract403applicationjson.md
@@ -0,0 +1,19 @@
+# UpdateContract403ApplicationJSON
+
+The user is not allowed to access this resource
+
+
+## Supported Types
+
+### ErrorResp
+
+```python
+updateContract403ApplicationJSON: shared.ErrorResp = /* values here */
+```
+
+### FailedRuleErrorResp
+
+```python
+updateContract403ApplicationJSON: shared.FailedRuleErrorResp = /* values here */
+```
+
diff --git a/customer_portal/docs/models/operations/updatecontractrequest.md b/customer_portal/docs/models/operations/updatecontractrequest.md
new file mode 100755
index 000000000..0a1723f88
--- /dev/null
+++ b/customer_portal/docs/models/operations/updatecontractrequest.md
@@ -0,0 +1,9 @@
+# UpdateContractRequest
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ |
+| `request_body` | Dict[str, *Any*] | :heavy_check_mark: | Requested contract body to update | |
+| `id` | *str* | :heavy_check_mark: | The ID of the contract | 5da0a718-c822-403d-9f5d-20d4584e0528 |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/updatecontractresponse.md b/customer_portal/docs/models/operations/updatecontractresponse.md
new file mode 100755
index 000000000..46ca3b66b
--- /dev/null
+++ b/customer_portal/docs/models/operations/updatecontractresponse.md
@@ -0,0 +1,13 @@
+# UpdateContractResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `error_resp` | [Optional[shared.ErrorResp]](../../models/shared/errorresp.md) | :heavy_minus_sign: | Could not authenticate the user |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
+| `update_contract_200_application_json_object` | [Optional[UpdateContract200ApplicationJSON]](../../models/operations/updatecontract200applicationjson.md) | :heavy_minus_sign: | Updated the contract successfully. |
+| `update_contract_403_application_json_one_of` | [Optional[Union[shared.ErrorResp, shared.FailedRuleErrorResp]]](../../models/operations/updatecontract403applicationjson.md) | :heavy_minus_sign: | The user is not allowed to access this resource |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/updatecontractsecurity.md b/customer_portal/docs/models/operations/updatecontractsecurity.md
new file mode 100755
index 000000000..96ce6796e
--- /dev/null
+++ b/customer_portal/docs/models/operations/updatecontractsecurity.md
@@ -0,0 +1,8 @@
+# UpdateContractSecurity
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `portal_auth` | *str* | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/updateopportunity200applicationjson.md b/customer_portal/docs/models/operations/updateopportunity200applicationjson.md
new file mode 100755
index 000000000..b218a5c54
--- /dev/null
+++ b/customer_portal/docs/models/operations/updateopportunity200applicationjson.md
@@ -0,0 +1,10 @@
+# UpdateOpportunity200ApplicationJSON
+
+Updated the opportunity successfully.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ |
+| `data` | [Optional[shared.Opportunity]](../../models/shared/opportunity.md) | :heavy_minus_sign: | The opportunity entity |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/updateopportunityrequest.md b/customer_portal/docs/models/operations/updateopportunityrequest.md
new file mode 100755
index 000000000..c2e2a4683
--- /dev/null
+++ b/customer_portal/docs/models/operations/updateopportunityrequest.md
@@ -0,0 +1,9 @@
+# UpdateOpportunityRequest
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ |
+| `request_body` | Dict[str, *Any*] | :heavy_check_mark: | Requested opportunity body to update | |
+| `id` | *str* | :heavy_check_mark: | The ID of opportunity | 5da0a718-c822-403d-9f5d-20d4584e0528 |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/updateopportunityresponse.md b/customer_portal/docs/models/operations/updateopportunityresponse.md
new file mode 100755
index 000000000..289f44d7e
--- /dev/null
+++ b/customer_portal/docs/models/operations/updateopportunityresponse.md
@@ -0,0 +1,12 @@
+# UpdateOpportunityResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| --------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `error_resp` | [Optional[shared.ErrorResp]](../../models/shared/errorresp.md) | :heavy_minus_sign: | Could not authenticate the user |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
+| `update_opportunity_200_application_json_object` | [Optional[UpdateOpportunity200ApplicationJSON]](../../models/operations/updateopportunity200applicationjson.md) | :heavy_minus_sign: | Updated the opportunity successfully. |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/updateopportunitysecurity.md b/customer_portal/docs/models/operations/updateopportunitysecurity.md
new file mode 100755
index 000000000..c837a4e45
--- /dev/null
+++ b/customer_portal/docs/models/operations/updateopportunitysecurity.md
@@ -0,0 +1,8 @@
+# UpdateOpportunitySecurity
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `portal_auth` | *str* | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/updateorder200applicationjson.md b/customer_portal/docs/models/operations/updateorder200applicationjson.md
new file mode 100755
index 000000000..3199a0dc0
--- /dev/null
+++ b/customer_portal/docs/models/operations/updateorder200applicationjson.md
@@ -0,0 +1,10 @@
+# UpdateOrder200ApplicationJSON
+
+Updated the order details successfully.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------ | ------------------------------------------------------ | ------------------------------------------------------ | ------------------------------------------------------ |
+| `data` | [Optional[shared.Order]](../../models/shared/order.md) | :heavy_minus_sign: | The order entity |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/updateorderrequest.md b/customer_portal/docs/models/operations/updateorderrequest.md
new file mode 100755
index 000000000..8f397f8ae
--- /dev/null
+++ b/customer_portal/docs/models/operations/updateorderrequest.md
@@ -0,0 +1,9 @@
+# UpdateOrderRequest
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ |
+| `request_body` | Dict[str, *Any*] | :heavy_minus_sign: | N/A | |
+| `id` | *str* | :heavy_check_mark: | The ID of order | 5da0a718-c822-403d-9f5d-20d4584e0528 |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/updateorderresponse.md b/customer_portal/docs/models/operations/updateorderresponse.md
new file mode 100755
index 000000000..de89a98fb
--- /dev/null
+++ b/customer_portal/docs/models/operations/updateorderresponse.md
@@ -0,0 +1,12 @@
+# UpdateOrderResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `error_resp` | [Optional[shared.ErrorResp]](../../models/shared/errorresp.md) | :heavy_minus_sign: | Could not authenticate the user |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
+| `update_order_200_application_json_object` | [Optional[UpdateOrder200ApplicationJSON]](../../models/operations/updateorder200applicationjson.md) | :heavy_minus_sign: | Updated the order details successfully. |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/updateordersecurity.md b/customer_portal/docs/models/operations/updateordersecurity.md
new file mode 100755
index 000000000..e078329c4
--- /dev/null
+++ b/customer_portal/docs/models/operations/updateordersecurity.md
@@ -0,0 +1,8 @@
+# UpdateOrderSecurity
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `portal_auth` | *str* | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/updateportaluser200applicationjson.md b/customer_portal/docs/models/operations/updateportaluser200applicationjson.md
new file mode 100755
index 000000000..9b6f581e0
--- /dev/null
+++ b/customer_portal/docs/models/operations/updateportaluser200applicationjson.md
@@ -0,0 +1,10 @@
+# UpdatePortalUser200ApplicationJSON
+
+The portal user updated successfully.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- |
+| `data` | [Optional[shared.PortalUser]](../../models/shared/portaluser.md) | :heavy_minus_sign: | The portal user entity |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/updateportaluserresponse.md b/customer_portal/docs/models/operations/updateportaluserresponse.md
new file mode 100755
index 000000000..096b36afc
--- /dev/null
+++ b/customer_portal/docs/models/operations/updateportaluserresponse.md
@@ -0,0 +1,12 @@
+# UpdatePortalUserResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `error_resp` | [Optional[shared.ErrorResp]](../../models/shared/errorresp.md) | :heavy_minus_sign: | Could not authenticate the user |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
+| `update_portal_user_200_application_json_object` | [Optional[UpdatePortalUser200ApplicationJSON]](../../models/operations/updateportaluser200applicationjson.md) | :heavy_minus_sign: | The portal user updated successfully. |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/updateportalusersecurity.md b/customer_portal/docs/models/operations/updateportalusersecurity.md
new file mode 100755
index 000000000..0c2c20dfe
--- /dev/null
+++ b/customer_portal/docs/models/operations/updateportalusersecurity.md
@@ -0,0 +1,8 @@
+# UpdatePortalUserSecurity
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `portal_auth` | *str* | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/upsertemailtemplates200applicationjson.md b/customer_portal/docs/models/operations/upsertemailtemplates200applicationjson.md
new file mode 100755
index 000000000..5681c4846
--- /dev/null
+++ b/customer_portal/docs/models/operations/upsertemailtemplates200applicationjson.md
@@ -0,0 +1,11 @@
+# UpsertEmailTemplates200ApplicationJSON
+
+Upserted email templates of the portal successfully.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
+| `email_templates` | [shared.EmailTemplates](../../models/shared/emailtemplates.md) | :heavy_check_mark: | Email templates used for authentication and internal processes |
+| `message` | [UpsertEmailTemplates200ApplicationJSONMessage](../../models/operations/upsertemailtemplates200applicationjsonmessage.md) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/upsertemailtemplates200applicationjsonmessage.md b/customer_portal/docs/models/operations/upsertemailtemplates200applicationjsonmessage.md
new file mode 100755
index 000000000..796d39479
--- /dev/null
+++ b/customer_portal/docs/models/operations/upsertemailtemplates200applicationjsonmessage.md
@@ -0,0 +1,8 @@
+# UpsertEmailTemplates200ApplicationJSONMessage
+
+
+## Values
+
+| Name | Value |
+| --------------------------------------- | --------------------------------------- |
+| `EMAIL_TEMPLATES_UPSERTED_SUCCESSFULLY` | Email Templates upserted successfully |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/upsertemailtemplatesrequest.md b/customer_portal/docs/models/operations/upsertemailtemplatesrequest.md
new file mode 100755
index 000000000..2c0bac06c
--- /dev/null
+++ b/customer_portal/docs/models/operations/upsertemailtemplatesrequest.md
@@ -0,0 +1,9 @@
+# UpsertEmailTemplatesRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- |
+| `email_templates` | [shared.EmailTemplates](../../models/shared/emailtemplates.md) | :heavy_check_mark: | Email templates payload |
+| `origin` | [shared.Origin](../../models/shared/origin.md) | :heavy_check_mark: | Origin of the portal |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/upsertemailtemplatesresponse.md b/customer_portal/docs/models/operations/upsertemailtemplatesresponse.md
new file mode 100755
index 000000000..3648f1404
--- /dev/null
+++ b/customer_portal/docs/models/operations/upsertemailtemplatesresponse.md
@@ -0,0 +1,12 @@
+# UpsertEmailTemplatesResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| --------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `error_resp` | [Optional[shared.ErrorResp]](../../models/shared/errorresp.md) | :heavy_minus_sign: | Could not authenticate the user |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
+| `upsert_email_templates_200_application_json_object` | [Optional[UpsertEmailTemplates200ApplicationJSON]](../../models/operations/upsertemailtemplates200applicationjson.md) | :heavy_minus_sign: | Upserted email templates of the portal successfully. |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/upsertemailtemplatessecurity.md b/customer_portal/docs/models/operations/upsertemailtemplatessecurity.md
new file mode 100755
index 000000000..e0f5643a3
--- /dev/null
+++ b/customer_portal/docs/models/operations/upsertemailtemplatessecurity.md
@@ -0,0 +1,8 @@
+# UpsertEmailTemplatesSecurity
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `epilot_auth` | *str* | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/upsertportalrequest.md b/customer_portal/docs/models/operations/upsertportalrequest.md
new file mode 100755
index 000000000..a0b625cc0
--- /dev/null
+++ b/customer_portal/docs/models/operations/upsertportalrequest.md
@@ -0,0 +1,9 @@
+# UpsertPortalRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- |
+| `upsert_portal_config` | [shared.UpsertPortalConfig](../../models/shared/upsertportalconfig.md) | :heavy_check_mark: | Portal payload |
+| `origin` | [shared.Origin](../../models/shared/origin.md) | :heavy_check_mark: | Origin of the portal |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/upsertportalresponse.md b/customer_portal/docs/models/operations/upsertportalresponse.md
new file mode 100755
index 000000000..c809dc9c7
--- /dev/null
+++ b/customer_portal/docs/models/operations/upsertportalresponse.md
@@ -0,0 +1,12 @@
+# UpsertPortalResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `error_resp` | [Optional[shared.ErrorResp]](../../models/shared/errorresp.md) | :heavy_minus_sign: | The request could not be validated |
+| `portal_config` | [Optional[shared.PortalConfig]](../../models/shared/portalconfig.md) | :heavy_minus_sign: | Portal upserted successfully. |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/upsertportalsecurity.md b/customer_portal/docs/models/operations/upsertportalsecurity.md
new file mode 100755
index 000000000..a0644bcfe
--- /dev/null
+++ b/customer_portal/docs/models/operations/upsertportalsecurity.md
@@ -0,0 +1,8 @@
+# UpsertPortalSecurity
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `epilot_auth` | *str* | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/upsertportalwidgetrequest.md b/customer_portal/docs/models/operations/upsertportalwidgetrequest.md
new file mode 100755
index 000000000..68d5a2cf7
--- /dev/null
+++ b/customer_portal/docs/models/operations/upsertportalwidgetrequest.md
@@ -0,0 +1,9 @@
+# UpsertPortalWidgetRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- |
+| `upsert_portal_widget` | [shared.UpsertPortalWidget](../../models/shared/upsertportalwidget.md) | :heavy_check_mark: | Portal widgets payload |
+| `origin` | [shared.Origin](../../models/shared/origin.md) | :heavy_check_mark: | Origin of the portal |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/upsertportalwidgetresponse.md b/customer_portal/docs/models/operations/upsertportalwidgetresponse.md
new file mode 100755
index 000000000..e6963c7ff
--- /dev/null
+++ b/customer_portal/docs/models/operations/upsertportalwidgetresponse.md
@@ -0,0 +1,12 @@
+# UpsertPortalWidgetResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `error_resp` | [Optional[shared.ErrorResp]](../../models/shared/errorresp.md) | :heavy_minus_sign: | The request could not be validated |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
+| `upsert_portal_widget` | [Optional[shared.UpsertPortalWidget]](../../models/shared/upsertportalwidget.md) | :heavy_minus_sign: | Portal widget configuration upserted successfully. |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/upsertportalwidgetsecurity.md b/customer_portal/docs/models/operations/upsertportalwidgetsecurity.md
new file mode 100755
index 000000000..3fe646c2c
--- /dev/null
+++ b/customer_portal/docs/models/operations/upsertportalwidgetsecurity.md
@@ -0,0 +1,8 @@
+# UpsertPortalWidgetSecurity
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `epilot_auth` | *str* | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/userexists200applicationjson.md b/customer_portal/docs/models/operations/userexists200applicationjson.md
new file mode 100755
index 000000000..6de1bf9df
--- /dev/null
+++ b/customer_portal/docs/models/operations/userexists200applicationjson.md
@@ -0,0 +1,11 @@
+# UserExists200ApplicationJSON
+
+Returned whether the user exists in the portal or not successfully.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- |
+| `exists` | *bool* | :heavy_check_mark: | Whether the user exists in the portal | true |
+| `user` | [Optional[shared.PortalUser]](../../models/shared/portaluser.md) | :heavy_minus_sign: | The portal user entity | |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/userexistsrequest.md b/customer_portal/docs/models/operations/userexistsrequest.md
new file mode 100755
index 000000000..b3c006e85
--- /dev/null
+++ b/customer_portal/docs/models/operations/userexistsrequest.md
@@ -0,0 +1,10 @@
+# UserExistsRequest
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ |
+| `email` | *str* | :heavy_check_mark: | N/A | user@example.com |
+| `org_id` | *str* | :heavy_check_mark: | N/A | 123 |
+| `origin` | [Optional[shared.Origin]](../../models/shared/origin.md) | :heavy_minus_sign: | Checkes if user exists in the given portal origin. If not provided, checks in all origins. | |
\ No newline at end of file
diff --git a/customer_portal/docs/models/operations/userexistsresponse.md b/customer_portal/docs/models/operations/userexistsresponse.md
new file mode 100755
index 000000000..e142e956c
--- /dev/null
+++ b/customer_portal/docs/models/operations/userexistsresponse.md
@@ -0,0 +1,12 @@
+# UserExistsResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `error_resp` | [Optional[shared.ErrorResp]](../../models/shared/errorresp.md) | :heavy_minus_sign: | Internal Server Error |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
+| `user_exists_200_application_json_object` | [Optional[UserExists200ApplicationJSON]](../../models/operations/userexists200applicationjson.md) | :heavy_minus_sign: | Returned whether the user exists in the portal or not successfully. |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/actionwidget.md b/customer_portal/docs/models/shared/actionwidget.md
new file mode 100755
index 000000000..ba93eeee9
--- /dev/null
+++ b/customer_portal/docs/models/shared/actionwidget.md
@@ -0,0 +1,13 @@
+# ActionWidget
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- |
+| `actions` | List[[WidgetAction](../../models/shared/widgetaction.md)] | :heavy_minus_sign: | N/A |
+| `headline` | [Optional[ActionWidgetHeadline]](../../models/shared/actionwidgetheadline.md) | :heavy_minus_sign: | N/A |
+| `id` | *str* | :heavy_check_mark: | N/A |
+| `list_index` | *int* | :heavy_check_mark: | Index of the widget in the list, used for ordering (left or right) |
+| `sub_headline` | [Optional[ActionWidgetSubHeadline]](../../models/shared/actionwidgetsubheadline.md) | :heavy_minus_sign: | N/A |
+| `type` | [ActionWidgetType](../../models/shared/actionwidgettype.md) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/actionwidgetheadline.md b/customer_portal/docs/models/shared/actionwidgetheadline.md
new file mode 100755
index 000000000..7101c1fac
--- /dev/null
+++ b/customer_portal/docs/models/shared/actionwidgetheadline.md
@@ -0,0 +1,9 @@
+# ActionWidgetHeadline
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------ | ------------------ | ------------------ | ------------------ |
+| `de` | *Optional[str]* | :heavy_minus_sign: | N/A |
+| `en` | *Optional[str]* | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/actionwidgetsubheadline.md b/customer_portal/docs/models/shared/actionwidgetsubheadline.md
new file mode 100755
index 000000000..0792a79ff
--- /dev/null
+++ b/customer_portal/docs/models/shared/actionwidgetsubheadline.md
@@ -0,0 +1,9 @@
+# ActionWidgetSubHeadline
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------ | ------------------ | ------------------ | ------------------ |
+| `de` | *Optional[str]* | :heavy_minus_sign: | N/A |
+| `en` | *Optional[str]* | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/actionwidgettype.md b/customer_portal/docs/models/shared/actionwidgettype.md
new file mode 100755
index 000000000..f68e26910
--- /dev/null
+++ b/customer_portal/docs/models/shared/actionwidgettype.md
@@ -0,0 +1,12 @@
+# ActionWidgetType
+
+
+## Values
+
+| Name | Value |
+| ----------------- | ----------------- |
+| `ACTION_WIDGET` | ACTION_WIDGET |
+| `CONTENT_WIDGET` | CONTENT_WIDGET |
+| `ENTITY_WIDGET` | ENTITY_WIDGET |
+| `TEASER_WIDGET` | TEASER_WIDGET |
+| `DOCUMENT_WIDGET` | DOCUMENT_WIDGET |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/activity.md b/customer_portal/docs/models/shared/activity.md
new file mode 100755
index 000000000..ac2a014df
--- /dev/null
+++ b/customer_portal/docs/models/shared/activity.md
@@ -0,0 +1,11 @@
+# Activity
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ----------------------------------------------------------- | ----------------------------------------------------------- | ----------------------------------------------------------- | ----------------------------------------------------------- | ----------------------------------------------------------- |
+| `message` | *str* | :heavy_check_mark: | Message for activity. Supports handlebars syntax. | {{caller}} did something with {{entity payload.entity.id}}. |
+| `payload` | Dict[str, *Any*] | :heavy_minus_sign: | N/A | [object Object] |
+| `title` | *str* | :heavy_check_mark: | Title for activity. Supports handlebars syntax. | My custom activity |
+| `type` | *str* | :heavy_check_mark: | N/A | MyCustomActivity |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/activitycallercontext.md b/customer_portal/docs/models/shared/activitycallercontext.md
new file mode 100755
index 000000000..e74232602
--- /dev/null
+++ b/customer_portal/docs/models/shared/activitycallercontext.md
@@ -0,0 +1,9 @@
+# ActivityCallerContext
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- |
+| `additional_properties` | Dict[str, *Any*] | :heavy_minus_sign: | N/A |
+| `portal_auth` | [Optional[ActivityCallerContextPortalAuth]](../../models/shared/activitycallercontextportalauth.md) | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/activitycallercontextportalauth.md b/customer_portal/docs/models/shared/activitycallercontextportalauth.md
new file mode 100755
index 000000000..16c2e085f
--- /dev/null
+++ b/customer_portal/docs/models/shared/activitycallercontextportalauth.md
@@ -0,0 +1,8 @@
+# ActivityCallerContextPortalAuth
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- |
+| `token` | [Optional[ActivityCallerContextPortalAuthToken]](../../models/shared/activitycallercontextportalauthtoken.md) | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/activitycallercontextportalauthtoken.md b/customer_portal/docs/models/shared/activitycallercontextportalauthtoken.md
new file mode 100755
index 000000000..860b6c9f9
--- /dev/null
+++ b/customer_portal/docs/models/shared/activitycallercontextportalauthtoken.md
@@ -0,0 +1,12 @@
+# ActivityCallerContextPortalAuthToken
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ |
+| `cognito_username` | *Optional[str]* | :heavy_minus_sign: | N/A | john@doe.com |
+| `custom_contact_entity_id` | *Optional[str]* | :heavy_minus_sign: | N/A | 7579d22f-9400-41d1-b460-04730239ee91 |
+| `custom_portal_user_id` | *Optional[str]* | :heavy_minus_sign: | N/A | 06c78f9d-af75-4483-893d-a3fad524400f |
+| `email` | *Optional[str]* | :heavy_minus_sign: | N/A | john@doe.com |
+| `sub` | *Optional[str]* | :heavy_minus_sign: | N/A | 8cc73157-3dc4-47f3-b163-d3a5039bba72 |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/activityitem.md b/customer_portal/docs/models/shared/activityitem.md
new file mode 100755
index 000000000..7f6669449
--- /dev/null
+++ b/customer_portal/docs/models/shared/activityitem.md
@@ -0,0 +1,13 @@
+# ActivityItem
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------- | --------------------------------------------------------------------------- | --------------------------------------------------------------------------- | --------------------------------------------------------------------------- | --------------------------------------------------------------------------- |
+| `id` | *Optional[str]* | :heavy_minus_sign: | See https://github.com/ulid/spec | 01F130Q52Q6MWSNS8N2AVXV4JN |
+| `message` | *str* | :heavy_check_mark: | Message for activity. Supports handlebars syntax. | {{caller}} did something with {{entity payload.entity.id}}. |
+| `payload` | [Optional[ActivityItemPayload]](../../models/shared/activityitempayload.md) | :heavy_minus_sign: | N/A | |
+| `timestamp` | [date](https://docs.python.org/3/library/datetime.html#date-objects) | :heavy_minus_sign: | N/A | |
+| `title` | *str* | :heavy_check_mark: | Title for activity. Supports handlebars syntax. | My custom activity |
+| `type` | *str* | :heavy_check_mark: | N/A | MyCustomActivity |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/activityitempayload.md b/customer_portal/docs/models/shared/activityitempayload.md
new file mode 100755
index 000000000..9bc557e17
--- /dev/null
+++ b/customer_portal/docs/models/shared/activityitempayload.md
@@ -0,0 +1,9 @@
+# ActivityItemPayload
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- |
+| `caller` | [Optional[ActivityCallerContext]](../../models/shared/activitycallercontext.md) | :heavy_minus_sign: | N/A |
+| `entity` | [Optional[ActivityItemPayloadEntity]](../../models/shared/activityitempayloadentity.md) | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/activityitempayloadentity.md b/customer_portal/docs/models/shared/activityitempayloadentity.md
new file mode 100755
index 000000000..dc09562d7
--- /dev/null
+++ b/customer_portal/docs/models/shared/activityitempayloadentity.md
@@ -0,0 +1,9 @@
+# ActivityItemPayloadEntity
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------ | ------------------ | ------------------ | ------------------ |
+| `id` | *Optional[str]* | :heavy_minus_sign: | N/A |
+| `schema` | *Optional[str]* | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/adminuser.md b/customer_portal/docs/models/shared/adminuser.md
new file mode 100755
index 000000000..50bb1e14a
--- /dev/null
+++ b/customer_portal/docs/models/shared/adminuser.md
@@ -0,0 +1,15 @@
+# AdminUser
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------------------------------------------------------------- |
+| `additional_properties` | Dict[str, *Any*] | :heavy_minus_sign: | N/A | |
+| `display_name` | *Optional[str]* | :heavy_minus_sign: | N/A | John |
+| `email` | *Optional[str]* | :heavy_minus_sign: | N/A | j.doe@epilot.cloud |
+| `image_uri` | [Optional[AdminUserImageURI]](../../models/shared/adminuserimageuri.md) | :heavy_minus_sign: | N/A | |
+| `org_id` | *Optional[str]* | :heavy_minus_sign: | N/A | 123 |
+| `phone` | *Optional[str]* | :heavy_minus_sign: | N/A | 12345 67890 |
+| `type` | *Optional[str]* | :heavy_minus_sign: | N/A | user |
+| `user_id` | *Optional[str]* | :heavy_minus_sign: | N/A | 123456 |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/adminuserimageuri.md b/customer_portal/docs/models/shared/adminuserimageuri.md
new file mode 100755
index 000000000..020964a97
--- /dev/null
+++ b/customer_portal/docs/models/shared/adminuserimageuri.md
@@ -0,0 +1,11 @@
+# AdminUserImageURI
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
+| `key` | *Optional[str]* | :heavy_minus_sign: | N/A | fuafjvoHKsudhfagweucjasdvga |
+| `original` | *Optional[str]* | :heavy_minus_sign: | N/A | https://fuafjvoHKsu.cloudimg.io/v7/e-mage-sam-bucket-dev.s3.eu-central-1.amazonaws.com/files/fuafjvoHKsudhfagweucjasdvga/original |
+| `thumbnail_32` | *Optional[str]* | :heavy_minus_sign: | N/A | https://fuafjvoHKsu.cloudimg.io/v7/e-mage-sam-bucket-dev.s3.eu-central-1.amazonaws.com/files/fuafjvoHKsudhfagweucjasdvga/original?w=32&h=32 |
+| `thumbnail_64` | *Optional[str]* | :heavy_minus_sign: | N/A | https://fuafjvoHKsu.cloudimg.io/v7/e-mage-sam-bucket-dev.s3.eu-central-1.amazonaws.com/files/fuafjvoHKsudhfagweucjasdvga/original?w=64&h=64 |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/balance.md b/customer_portal/docs/models/shared/balance.md
new file mode 100755
index 000000000..435ab2e15
--- /dev/null
+++ b/customer_portal/docs/models/shared/balance.md
@@ -0,0 +1,10 @@
+# Balance
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ----------------------------------------------------------------- | ----------------------------------------------------------------- | ----------------------------------------------------------------- | ----------------------------------------------------------------- | ----------------------------------------------------------------- |
+| `balance` | *Optional[int]* | :heavy_minus_sign: | Current balance of the customer in cents. (precision 2) | 8990 |
+| `balance_currency` | *Optional[str]* | :heavy_minus_sign: | Currency code in ISO 4217 format | EUR |
+| `balance_decimal` | *Optional[float]* | :heavy_minus_sign: | Current balance of the customer in decimal string representation. | 89.90 |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/billingevent.md b/customer_portal/docs/models/shared/billingevent.md
new file mode 100755
index 000000000..1560d3b05
--- /dev/null
+++ b/customer_portal/docs/models/shared/billingevent.md
@@ -0,0 +1,17 @@
+# BillingEvent
+
+
+## Supported Types
+
+### InstallmentEvent
+
+```python
+billingEvent: shared.InstallmentEvent = /* values here */
+```
+
+### BillingEventReimbursementEvent
+
+```python
+billingEvent: shared.BillingEventReimbursementEvent = /* values here */
+```
+
diff --git a/customer_portal/docs/models/shared/billingeventreimbursementevent.md b/customer_portal/docs/models/shared/billingeventreimbursementevent.md
new file mode 100755
index 000000000..a34fa9b30
--- /dev/null
+++ b/customer_portal/docs/models/shared/billingeventreimbursementevent.md
@@ -0,0 +1,24 @@
+# BillingEventReimbursementEvent
+
+A base billing event to be inherited by all billing events.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- |
+| `additional_properties` | Dict[str, *Any*] | :heavy_minus_sign: | N/A | |
+| `created_at` | [date](https://docs.python.org/3/library/datetime.html#date-objects) | :heavy_check_mark: | Creation timestamp of the entity | 2021-02-09T12:41:43.662Z |
+| `id` | *str* | :heavy_check_mark: | Entity ID | 5da0a718-c822-403d-9f5d-20d4584e0528 |
+| `org` | *str* | :heavy_check_mark: | Organization ID the entity belongs to | 123 |
+| `tags` | List[*str*] | :heavy_minus_sign: | Array of entity tags | example,mock |
+| `title` | *str* | :heavy_check_mark: | Title of the entity | Example Entity |
+| `updated_at` | [date](https://docs.python.org/3/library/datetime.html#date-objects) | :heavy_check_mark: | Last update timestamp of the entity | 2021-02-09T12:41:43.662Z |
+| `billing_amount` | *Optional[int]* | :heavy_minus_sign: | Amount to be paid in cents i.e. precision 2 | 10050 |
+| `billing_amount_decimal` | *Optional[str]* | :heavy_minus_sign: | Amount to be paid in cents in decimal string representation | 100.50 |
+| `billing_currency` | *Optional[str]* | :heavy_minus_sign: | Currency code in ISO 4217 format | EUR |
+| `contract` | [BillingEventReimbursementEventContract](../../models/shared/billingeventreimbursementeventcontract.md) | :heavy_check_mark: | N/A | |
+| `due_date` | [datetime](https://docs.python.org/3/library/datetime.html#datetime-objects) | :heavy_minus_sign: | Date on which the installment is due. | |
+| `external_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier for event, used to reference the event to a 3rd party resource such as a SAP Installment. | d4fb2a4e-3f74-4fc4-8fba-6fdaaaa3b08e |
+| `paid_date` | [datetime](https://docs.python.org/3/library/datetime.html#datetime-objects) | :heavy_minus_sign: | Date on which the customer is reimbursed. | |
+| `type` | [BillingEventReimbursementEventType](../../models/shared/billingeventreimbursementeventtype.md) | :heavy_check_mark: | Type of the billing event. | reimbursement |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/billingeventreimbursementeventcontract.md b/customer_portal/docs/models/shared/billingeventreimbursementeventcontract.md
new file mode 100755
index 000000000..c620d816e
--- /dev/null
+++ b/customer_portal/docs/models/shared/billingeventreimbursementeventcontract.md
@@ -0,0 +1,8 @@
+# BillingEventReimbursementEventContract
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- |
+| `dollar_relation` | List[[BillingEventReimbursementEventContractDollarRelation](../../models/shared/billingeventreimbursementeventcontractdollarrelation.md)] | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/billingeventreimbursementeventcontractdollarrelation.md b/customer_portal/docs/models/shared/billingeventreimbursementeventcontractdollarrelation.md
new file mode 100755
index 000000000..ccad9f15e
--- /dev/null
+++ b/customer_portal/docs/models/shared/billingeventreimbursementeventcontractdollarrelation.md
@@ -0,0 +1,8 @@
+# BillingEventReimbursementEventContractDollarRelation
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ |
+| `entity_id` | *Optional[str]* | :heavy_minus_sign: | Entity ID for the related contract. | f589786b-3024-43cd-9cb3-5a3c953f2896 |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/billingeventreimbursementeventtype.md b/customer_portal/docs/models/shared/billingeventreimbursementeventtype.md
new file mode 100755
index 000000000..50f3c4475
--- /dev/null
+++ b/customer_portal/docs/models/shared/billingeventreimbursementeventtype.md
@@ -0,0 +1,10 @@
+# BillingEventReimbursementEventType
+
+Type of the billing event.
+
+
+## Values
+
+| Name | Value |
+| --------------- | --------------- |
+| `REIMBURSEMENT` | reimbursement |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/contact.md b/customer_portal/docs/models/shared/contact.md
new file mode 100755
index 000000000..466bba802
--- /dev/null
+++ b/customer_portal/docs/models/shared/contact.md
@@ -0,0 +1,17 @@
+# Contact
+
+The mapped contact of the portal user
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- |
+| `additional_properties` | Dict[str, *Any*] | :heavy_minus_sign: | N/A | |
+| `created_at` | [date](https://docs.python.org/3/library/datetime.html#date-objects) | :heavy_check_mark: | Creation timestamp of the entity | 2021-02-09T12:41:43.662Z |
+| `id` | *str* | :heavy_check_mark: | Entity ID | 5da0a718-c822-403d-9f5d-20d4584e0528 |
+| `org` | *str* | :heavy_check_mark: | Organization ID the entity belongs to | 123 |
+| `schema` | [ContactSchema](../../models/shared/contactschema.md) | :heavy_check_mark: | N/A | |
+| `tags` | List[*str*] | :heavy_minus_sign: | Array of entity tags | example,mock |
+| `title` | *str* | :heavy_check_mark: | Title of the entity | Example Entity |
+| `updated_at` | [date](https://docs.python.org/3/library/datetime.html#date-objects) | :heavy_check_mark: | Last update timestamp of the entity | 2021-02-09T12:41:43.662Z |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/contactcountrequest.md b/customer_portal/docs/models/shared/contactcountrequest.md
new file mode 100755
index 000000000..e97b65da9
--- /dev/null
+++ b/customer_portal/docs/models/shared/contactcountrequest.md
@@ -0,0 +1,9 @@
+# ContactCountRequest
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------- | --------------------------------- | --------------------------------- | --------------------------------- | --------------------------------- |
+| `contact_identifiers` | Dict[str, *str*] | :heavy_check_mark: | Identifiers to identify a contact | |
+| `org_id` | *str* | :heavy_check_mark: | ID of the organization | 728 |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/contactschema.md b/customer_portal/docs/models/shared/contactschema.md
new file mode 100755
index 000000000..b70ec17c3
--- /dev/null
+++ b/customer_portal/docs/models/shared/contactschema.md
@@ -0,0 +1,8 @@
+# ContactSchema
+
+
+## Values
+
+| Name | Value |
+| --------- | --------- |
+| `CONTACT` | contact |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/contentwidget.md b/customer_portal/docs/models/shared/contentwidget.md
new file mode 100755
index 000000000..3c0483cc3
--- /dev/null
+++ b/customer_portal/docs/models/shared/contentwidget.md
@@ -0,0 +1,13 @@
+# ContentWidget
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
+| `content` | *Optional[str]* | :heavy_minus_sign: | N/A |
+| `headline` | [Optional[ContentWidgetHeadline]](../../models/shared/contentwidgetheadline.md) | :heavy_minus_sign: | N/A |
+| `id` | *str* | :heavy_check_mark: | N/A |
+| `list_index` | *int* | :heavy_check_mark: | Index of the widget in the list, used for ordering (left or right) |
+| `sub_headline` | [Optional[ContentWidgetSubHeadline]](../../models/shared/contentwidgetsubheadline.md) | :heavy_minus_sign: | N/A |
+| `type` | [ContentWidgetType](../../models/shared/contentwidgettype.md) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/contentwidgetheadline.md b/customer_portal/docs/models/shared/contentwidgetheadline.md
new file mode 100755
index 000000000..9572bbd27
--- /dev/null
+++ b/customer_portal/docs/models/shared/contentwidgetheadline.md
@@ -0,0 +1,9 @@
+# ContentWidgetHeadline
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------ | ------------------ | ------------------ | ------------------ |
+| `de` | *Optional[str]* | :heavy_minus_sign: | N/A |
+| `en` | *Optional[str]* | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/contentwidgetsubheadline.md b/customer_portal/docs/models/shared/contentwidgetsubheadline.md
new file mode 100755
index 000000000..6eb7d104f
--- /dev/null
+++ b/customer_portal/docs/models/shared/contentwidgetsubheadline.md
@@ -0,0 +1,9 @@
+# ContentWidgetSubHeadline
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------ | ------------------ | ------------------ | ------------------ |
+| `de` | *Optional[str]* | :heavy_minus_sign: | N/A |
+| `en` | *Optional[str]* | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/contentwidgettype.md b/customer_portal/docs/models/shared/contentwidgettype.md
new file mode 100755
index 000000000..05c88ea92
--- /dev/null
+++ b/customer_portal/docs/models/shared/contentwidgettype.md
@@ -0,0 +1,12 @@
+# ContentWidgetType
+
+
+## Values
+
+| Name | Value |
+| ----------------- | ----------------- |
+| `ACTION_WIDGET` | ACTION_WIDGET |
+| `CONTENT_WIDGET` | CONTENT_WIDGET |
+| `ENTITY_WIDGET` | ENTITY_WIDGET |
+| `TEASER_WIDGET` | TEASER_WIDGET |
+| `DOCUMENT_WIDGET` | DOCUMENT_WIDGET |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/contract.md b/customer_portal/docs/models/shared/contract.md
new file mode 100755
index 000000000..cc86e450f
--- /dev/null
+++ b/customer_portal/docs/models/shared/contract.md
@@ -0,0 +1,42 @@
+# Contract
+
+The contract entity
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- |
+| `additional_properties` | Dict[str, *Any*] | :heavy_minus_sign: | N/A | |
+| `created_at` | [date](https://docs.python.org/3/library/datetime.html#date-objects) | :heavy_check_mark: | Creation timestamp of the entity | 2021-02-09T12:41:43.662Z |
+| `id` | *str* | :heavy_check_mark: | Entity ID | 5da0a718-c822-403d-9f5d-20d4584e0528 |
+| `org` | *str* | :heavy_check_mark: | Organization ID the entity belongs to | 123 |
+| `tags` | List[*str*] | :heavy_minus_sign: | Array of entity tags | example,mock |
+| `title` | *str* | :heavy_check_mark: | Title of the entity | Example Entity |
+| `updated_at` | [date](https://docs.python.org/3/library/datetime.html#date-objects) | :heavy_check_mark: | Last update timestamp of the entity | 2021-02-09T12:41:43.662Z |
+| `account_number` | *Optional[str]* | :heavy_minus_sign: | The account number associated with the contract. | 67890 |
+| `additional_addresses` | *Optional[str]* | :heavy_minus_sign: | Any additional addresses associated with the contract. | 789 Oak St, Anytown |
+| `balance` | *Optional[int]* | :heavy_minus_sign: | Current balance of the contract in cents. (precision 2) | 8990 |
+| `balance_amount_decimal` | *Optional[str]* | :heavy_minus_sign: | Current balance of the contract in decimal string representation. | 89.90 |
+| `balance_currency` | *Optional[str]* | :heavy_minus_sign: | Currency code in ISO 4217 format | EUR |
+| `billing_address` | *Optional[str]* | :heavy_minus_sign: | The billing address associated with the contract. | 123 Main St, Anytown |
+| `billing_duration_amount` | *Optional[float]* | :heavy_minus_sign: | The duration of the billing period. | 30 |
+| `billing_period` | [Optional[ContractBillingPeriod]](../../models/shared/contractbillingperiod.md) | :heavy_minus_sign: | The billing period associated with the contract. | monthly |
+| `billing_schedule_by_month_day` | *Optional[int]* | :heavy_minus_sign: | Defines the day of the month in which the installments are due. | 2 |
+| `billing_schedule_end_date` | [datetime](https://docs.python.org/3/library/datetime.html#datetime-objects) | :heavy_minus_sign: | Defines the end date for the billing schedule | 2020-01-01T00:00:00.000Z |
+| `billing_schedule_start_date` | [datetime](https://docs.python.org/3/library/datetime.html#datetime-objects) | :heavy_minus_sign: | Defines the start date for the billing schedule | 2020-01-01T00:00:00.000Z |
+| `branch` | [Optional[ContractBranch]](../../models/shared/contractbranch.md) | :heavy_minus_sign: | The branch associated with the contract. | power |
+| `contract_name` | *Optional[str]* | :heavy_minus_sign: | The name of the contract. | Grid Contract |
+| `contract_number` | *Optional[str]* | :heavy_minus_sign: | The unique identifier of the contract. | 12345 |
+| `delivery_address` | *Optional[str]* | :heavy_minus_sign: | The delivery address associated with the contract. | 456 Elm St, Anytown |
+| `description` | *Optional[str]* | :heavy_minus_sign: | A brief description of the contract. | This contract is for the supply of widgets. |
+| `installment_amount` | *Optional[int]* | :heavy_minus_sign: | Set amount for installments in cents. (precision 2) | 10050 |
+| `installment_amount_decimal` | *Optional[str]* | :heavy_minus_sign: | Set amount for installments in decimal string representation. | 100.50 |
+| `notice_time_amount` | *Optional[float]* | :heavy_minus_sign: | The amount of notice required for termination of the contract. | 30 |
+| `notice_time_unit` | [Optional[ContractNoticeTimeUnit]](../../models/shared/contractnoticetimeunit.md) | :heavy_minus_sign: | The unit of time for the notice period. | months |
+| `renewal_duration_amount` | *Optional[float]* | :heavy_minus_sign: | The duration of the renewal period. | 365 |
+| `renewal_duration_unit` | [Optional[ContractRenewalDurationUnit]](../../models/shared/contractrenewaldurationunit.md) | :heavy_minus_sign: | The unit of time for the renewal period. | years |
+| `start_date` | *Optional[str]* | :heavy_minus_sign: | The start date of the contract. | 2021-01-01 |
+| `status` | [Optional[ContractStatus]](../../models/shared/contractstatus.md) | :heavy_minus_sign: | The status of the contract. | approved |
+| `termination_date` | *Optional[str]* | :heavy_minus_sign: | The date on which the contract was terminated. | 2022-01-01 |
+| `termination_reason` | *Optional[str]* | :heavy_minus_sign: | The reason for the termination of the contract. | Non-payment |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/contractbillingperiod.md b/customer_portal/docs/models/shared/contractbillingperiod.md
new file mode 100755
index 000000000..b755d5a19
--- /dev/null
+++ b/customer_portal/docs/models/shared/contractbillingperiod.md
@@ -0,0 +1,14 @@
+# ContractBillingPeriod
+
+The billing period associated with the contract.
+
+
+## Values
+
+| Name | Value |
+| ---------------- | ---------------- |
+| `WEEKLY` | weekly |
+| `MONTHLY` | monthly |
+| `EVERY_QUARTER` | every_quarter |
+| `EVERY_6_MONTHS` | every_6_months |
+| `YEARLY` | yearly |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/contractbranch.md b/customer_portal/docs/models/shared/contractbranch.md
new file mode 100755
index 000000000..aa70e4593
--- /dev/null
+++ b/customer_portal/docs/models/shared/contractbranch.md
@@ -0,0 +1,14 @@
+# ContractBranch
+
+The branch associated with the contract.
+
+
+## Values
+
+| Name | Value |
+| ------------------ | ------------------ |
+| `POWER` | power |
+| `GAS` | gas |
+| `WATER` | water |
+| `WASTE_WATER` | waste_water |
+| `DISTRICT_HEATING` | district_heating |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/contractnoticetimeunit.md b/customer_portal/docs/models/shared/contractnoticetimeunit.md
new file mode 100755
index 000000000..26a1a91b2
--- /dev/null
+++ b/customer_portal/docs/models/shared/contractnoticetimeunit.md
@@ -0,0 +1,12 @@
+# ContractNoticeTimeUnit
+
+The unit of time for the notice period.
+
+
+## Values
+
+| Name | Value |
+| -------- | -------- |
+| `WEEKS` | weeks |
+| `MONTHS` | months |
+| `YEARS` | years |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/contractrenewaldurationunit.md b/customer_portal/docs/models/shared/contractrenewaldurationunit.md
new file mode 100755
index 000000000..a791e6896
--- /dev/null
+++ b/customer_portal/docs/models/shared/contractrenewaldurationunit.md
@@ -0,0 +1,12 @@
+# ContractRenewalDurationUnit
+
+The unit of time for the renewal period.
+
+
+## Values
+
+| Name | Value |
+| -------- | -------- |
+| `WEEKS` | weeks |
+| `MONTHS` | months |
+| `YEARS` | years |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/contractstatus.md b/customer_portal/docs/models/shared/contractstatus.md
new file mode 100755
index 000000000..1d91cdecd
--- /dev/null
+++ b/customer_portal/docs/models/shared/contractstatus.md
@@ -0,0 +1,17 @@
+# ContractStatus
+
+The status of the contract.
+
+
+## Values
+
+| Name | Value |
+| --------------------- | --------------------- |
+| `DRAFT` | draft |
+| `IN_APPROVAL_PROCESS` | in_approval_process |
+| `APPROVED` | approved |
+| `ACTIVE` | active |
+| `DEACTIVATED` | deactivated |
+| `REVOKED` | revoked |
+| `TERMINATED` | terminated |
+| `EXPIRED` | expired |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/createssouserrequest.md b/customer_portal/docs/models/shared/createssouserrequest.md
new file mode 100755
index 000000000..13cbc11ac
--- /dev/null
+++ b/customer_portal/docs/models/shared/createssouserrequest.md
@@ -0,0 +1,10 @@
+# CreateSSOUserRequest
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ----------------------------- | ----------------------------- | ----------------------------- | ----------------------------- | ----------------------------- |
+| `email` | *str* | :heavy_check_mark: | User's email address | testemail921@yopmail.com |
+| `first_name` | *Optional[str]* | :heavy_minus_sign: | First Name of the portal user | John |
+| `last_name` | *Optional[str]* | :heavy_minus_sign: | Last Name of the portal user | Doe |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/createuserrequest.md b/customer_portal/docs/models/shared/createuserrequest.md
new file mode 100755
index 000000000..2de66c9a7
--- /dev/null
+++ b/customer_portal/docs/models/shared/createuserrequest.md
@@ -0,0 +1,15 @@
+# CreateUserRequest
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------ | ------------------------------------------ | ------------------------------------------ | ------------------------------------------ | ------------------------------------------ |
+| `contact_id` | *Optional[str]* | :heavy_minus_sign: | ID of the contact | 123456 |
+| `contact_identifiers` | Dict[str, *str*] | :heavy_minus_sign: | Identifiers to identify a contact | |
+| `email` | *str* | :heavy_check_mark: | User's email address | testemail921@yopmail.com |
+| `first_name` | *Optional[str]* | :heavy_minus_sign: | First Name of the portal user | John |
+| `last_name` | *Optional[str]* | :heavy_minus_sign: | Last Name of the portal user | Doe |
+| `org_id` | *str* | :heavy_check_mark: | ID of the organization | 728 |
+| `password` | *str* | :heavy_check_mark: | User's password | 124n$aAJs*d41h4 |
+| `secondary_identifier` | *Optional[str]* | :heavy_minus_sign: | Secondary identifier to identify a contact | 123456 |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/deleteentityfile.md b/customer_portal/docs/models/shared/deleteentityfile.md
new file mode 100755
index 000000000..4c030b410
--- /dev/null
+++ b/customer_portal/docs/models/shared/deleteentityfile.md
@@ -0,0 +1,10 @@
+# DeleteEntityFile
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------ | ------------------------ | ------------------------ | ------------------------ | ------------------------ |
+| `entity_id` | *str* | :heavy_check_mark: | Entity ID | 123456 |
+| `entity_type` | *str* | :heavy_check_mark: | Entity type | order |
+| `file_entity_ids` | List[*str*] | :heavy_check_mark: | Array of file entity IDs | 12345 |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/emailtemplates.md b/customer_portal/docs/models/shared/emailtemplates.md
new file mode 100755
index 000000000..1e25e5a9f
--- /dev/null
+++ b/customer_portal/docs/models/shared/emailtemplates.md
@@ -0,0 +1,14 @@
+# EmailTemplates
+
+Email templates used for authentication and internal processes
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------- | ------------------------------------------------------------------------- | ------------------------------------------------------------------------- | ------------------------------------------------------------------------- | ------------------------------------------------------------------------- |
+| `confirm_account` | *Optional[str]* | :heavy_minus_sign: | ID of the confirmation email template upon registration | 701f089d-6953-48b5-ac35-442de7c59cd3 |
+| `forgot_password` | *Optional[str]* | :heavy_minus_sign: | ID of the email template for forgot password | 6538fddb-f0e9-4f0f-af51-6e57891ff20a |
+| `invitation` | *Optional[str]* | :heavy_minus_sign: | ID of the email template for invitation | 14ae65fb-0dc1-4863-8743-6bc01da469f6 |
+| `on_map_a_pending_user` | *Optional[str]* | :heavy_minus_sign: | ID of the email template for mapping a pending portal user with a contact | 940134fa-50f2-4204-a08a-fd3afddbf39a |
+| `on_new_quote` | *Optional[str]* | :heavy_minus_sign: | ID of the email template for new quote | b03e2b88-8f3f-4a93-8118-1fb07e9198a1 |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/entityfilecount.md b/customer_portal/docs/models/shared/entityfilecount.md
new file mode 100755
index 000000000..b143cb6ea
--- /dev/null
+++ b/customer_portal/docs/models/shared/entityfilecount.md
@@ -0,0 +1,11 @@
+# EntityFileCount
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- |
+| `schema` | [EntitySlug](../../models/shared/entityslug.md) | :heavy_check_mark: | URL-friendly identifier for the entity schema | contact |
+| `title` | *Optional[str]* | :heavy_minus_sign: | The title of the parent entity | Opportunity ABC |
+| `entity_id` | *str* | :heavy_check_mark: | The ID of the parent entity | d8dffa9a-6c90-4c4e-b8d1-032194b25526 |
+| `file_count` | *int* | :heavy_check_mark: | Number of files associated with the entity and shared with portal user | 2 |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/entityitem.md b/customer_portal/docs/models/shared/entityitem.md
new file mode 100755
index 000000000..ec6fdc1d9
--- /dev/null
+++ b/customer_portal/docs/models/shared/entityitem.md
@@ -0,0 +1,15 @@
+# EntityItem
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- |
+| `additional_properties` | Dict[str, *Any*] | :heavy_minus_sign: | N/A | |
+| `created_at` | [date](https://docs.python.org/3/library/datetime.html#date-objects) | :heavy_check_mark: | Creation timestamp of the entity | 2021-02-09T12:41:43.662Z |
+| `id` | *str* | :heavy_check_mark: | Entity ID | 5da0a718-c822-403d-9f5d-20d4584e0528 |
+| `org` | *str* | :heavy_check_mark: | Organization ID the entity belongs to | 123 |
+| `schema` | [EntitySlug](../../models/shared/entityslug.md) | :heavy_check_mark: | URL-friendly identifier for the entity schema | contact |
+| `tags` | List[*str*] | :heavy_minus_sign: | Array of entity tags | example,mock |
+| `title` | *str* | :heavy_check_mark: | Title of the entity | Example Entity |
+| `updated_at` | [date](https://docs.python.org/3/library/datetime.html#date-objects) | :heavy_check_mark: | Last update timestamp of the entity | 2021-02-09T12:41:43.662Z |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/entityslug.md b/customer_portal/docs/models/shared/entityslug.md
new file mode 100755
index 000000000..f3a4a1574
--- /dev/null
+++ b/customer_portal/docs/models/shared/entityslug.md
@@ -0,0 +1,18 @@
+# EntitySlug
+
+URL-friendly identifier for the entity schema
+
+
+## Values
+
+| Name | Value |
+| --------------- | --------------- |
+| `CONTACT` | contact |
+| `CONTRACT` | contract |
+| `FILE` | file |
+| `ORDER` | order |
+| `OPPORTUNITY` | opportunity |
+| `PRODUCT` | product |
+| `PRICE` | price |
+| `METER` | meter |
+| `METER_COUNTER` | meter_counter |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/entitywidget.md b/customer_portal/docs/models/shared/entitywidget.md
new file mode 100755
index 000000000..78c2ab5a1
--- /dev/null
+++ b/customer_portal/docs/models/shared/entitywidget.md
@@ -0,0 +1,13 @@
+# EntityWidget
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- |
+| `headline` | [Optional[EntityWidgetHeadline]](../../models/shared/entitywidgetheadline.md) | :heavy_minus_sign: | N/A |
+| `id` | *str* | :heavy_check_mark: | N/A |
+| `list_index` | *int* | :heavy_check_mark: | Index of the widget in the list, used for ordering (left or right) |
+| `schema` | *Optional[str]* | :heavy_minus_sign: | N/A |
+| `sub_headline` | [Optional[EntityWidgetSubHeadline]](../../models/shared/entitywidgetsubheadline.md) | :heavy_minus_sign: | N/A |
+| `type` | [EntityWidgetType](../../models/shared/entitywidgettype.md) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/entitywidgetheadline.md b/customer_portal/docs/models/shared/entitywidgetheadline.md
new file mode 100755
index 000000000..6b49304dd
--- /dev/null
+++ b/customer_portal/docs/models/shared/entitywidgetheadline.md
@@ -0,0 +1,9 @@
+# EntityWidgetHeadline
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------ | ------------------ | ------------------ | ------------------ |
+| `de` | *Optional[str]* | :heavy_minus_sign: | N/A |
+| `en` | *Optional[str]* | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/entitywidgetsubheadline.md b/customer_portal/docs/models/shared/entitywidgetsubheadline.md
new file mode 100755
index 000000000..9ea346aa9
--- /dev/null
+++ b/customer_portal/docs/models/shared/entitywidgetsubheadline.md
@@ -0,0 +1,9 @@
+# EntityWidgetSubHeadline
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------ | ------------------ | ------------------ | ------------------ |
+| `de` | *Optional[str]* | :heavy_minus_sign: | N/A |
+| `en` | *Optional[str]* | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/entitywidgettype.md b/customer_portal/docs/models/shared/entitywidgettype.md
new file mode 100755
index 000000000..a13f5851f
--- /dev/null
+++ b/customer_portal/docs/models/shared/entitywidgettype.md
@@ -0,0 +1,12 @@
+# EntityWidgetType
+
+
+## Values
+
+| Name | Value |
+| ----------------- | ----------------- |
+| `ACTION_WIDGET` | ACTION_WIDGET |
+| `CONTENT_WIDGET` | CONTENT_WIDGET |
+| `ENTITY_WIDGET` | ENTITY_WIDGET |
+| `TEASER_WIDGET` | TEASER_WIDGET |
+| `DOCUMENT_WIDGET` | DOCUMENT_WIDGET |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/errorresp.md b/customer_portal/docs/models/shared/errorresp.md
new file mode 100755
index 000000000..376d59b43
--- /dev/null
+++ b/customer_portal/docs/models/shared/errorresp.md
@@ -0,0 +1,8 @@
+# ErrorResp
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------ | ------------------ | ------------------ | ------------------ |
+| `message` | *Optional[str]* | :heavy_minus_sign: | Error message |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/extraschemaattributes.md b/customer_portal/docs/models/shared/extraschemaattributes.md
new file mode 100755
index 000000000..3ddf533a5
--- /dev/null
+++ b/customer_portal/docs/models/shared/extraschemaattributes.md
@@ -0,0 +1,10 @@
+# ExtraSchemaAttributes
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------ | ------------------ | ------------------ | ------------------ |
+| `group` | *str* | :heavy_check_mark: | Attribute group |
+| `label` | *str* | :heavy_check_mark: | Attribute label |
+| `name` | *str* | :heavy_check_mark: | Attribute name |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/failedruleerrorresp.md b/customer_portal/docs/models/shared/failedruleerrorresp.md
new file mode 100755
index 000000000..c2691e972
--- /dev/null
+++ b/customer_portal/docs/models/shared/failedruleerrorresp.md
@@ -0,0 +1,9 @@
+# FailedRuleErrorResp
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- |
+| `failed_rule` | [Optional[FailedRuleErrorRespFailedRule]](../../models/shared/failedruleerrorrespfailedrule.md) | :heavy_minus_sign: | Failed validation rule |
+| `message` | *Optional[str]* | :heavy_minus_sign: | Error message |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/failedruleerrorrespfailedrule.md b/customer_portal/docs/models/shared/failedruleerrorrespfailedrule.md
new file mode 100755
index 000000000..5af7aaafd
--- /dev/null
+++ b/customer_portal/docs/models/shared/failedruleerrorrespfailedrule.md
@@ -0,0 +1,9 @@
+# FailedRuleErrorRespFailedRule
+
+Failed validation rule
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------- | ----------- | ----------- | ----------- |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/file.md b/customer_portal/docs/models/shared/file.md
new file mode 100755
index 000000000..23cf17608
--- /dev/null
+++ b/customer_portal/docs/models/shared/file.md
@@ -0,0 +1,17 @@
+# File
+
+The file entity
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- |
+| `additional_properties` | Dict[str, *Any*] | :heavy_minus_sign: | N/A | |
+| `created_at` | [date](https://docs.python.org/3/library/datetime.html#date-objects) | :heavy_check_mark: | Creation timestamp of the entity | 2021-02-09T12:41:43.662Z |
+| `id` | *str* | :heavy_check_mark: | Entity ID | 5da0a718-c822-403d-9f5d-20d4584e0528 |
+| `org` | *str* | :heavy_check_mark: | Organization ID the entity belongs to | 123 |
+| `schema` | [FileSchema](../../models/shared/fileschema.md) | :heavy_check_mark: | N/A | |
+| `tags` | List[*str*] | :heavy_minus_sign: | Array of entity tags | example,mock |
+| `title` | *str* | :heavy_check_mark: | Title of the entity | Example Entity |
+| `updated_at` | [date](https://docs.python.org/3/library/datetime.html#date-objects) | :heavy_check_mark: | Last update timestamp of the entity | 2021-02-09T12:41:43.662Z |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/fileitem.md b/customer_portal/docs/models/shared/fileitem.md
new file mode 100755
index 000000000..b33f4bffb
--- /dev/null
+++ b/customer_portal/docs/models/shared/fileitem.md
@@ -0,0 +1,24 @@
+# FileItem
+
+The file entity
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- |
+| `additional_properties` | Dict[str, *Any*] | :heavy_minus_sign: | N/A | |
+| `created_at` | [date](https://docs.python.org/3/library/datetime.html#date-objects) | :heavy_check_mark: | Creation timestamp of the entity | 2021-02-09T12:41:43.662Z |
+| `id` | *str* | :heavy_check_mark: | Entity ID | 5da0a718-c822-403d-9f5d-20d4584e0528 |
+| `org` | *str* | :heavy_check_mark: | Organization ID the entity belongs to | 123 |
+| `relations` | List[[FileItemRelations](../../models/shared/fileitemrelations.md)] | :heavy_minus_sign: | N/A | |
+| `schema` | [FileItemSchema](../../models/shared/fileitemschema.md) | :heavy_check_mark: | N/A | |
+| `tags` | List[*str*] | :heavy_minus_sign: | Array of entity tags | example,mock |
+| `title` | *str* | :heavy_check_mark: | Title of the entity | Example Entity |
+| `updated_at` | [date](https://docs.python.org/3/library/datetime.html#date-objects) | :heavy_check_mark: | Last update timestamp of the entity | 2021-02-09T12:41:43.662Z |
+| `access_control` | [Optional[FileItemAccessControl]](../../models/shared/fileitemaccesscontrol.md) | :heavy_minus_sign: | N/A | |
+| `filename` | *Optional[str]* | :heavy_minus_sign: | N/A | document.pdf |
+| `is_new` | *Optional[bool]* | :heavy_minus_sign: | Indicate whether the user has not seen/downloaded the file before | |
+| `mime_type` | *Optional[str]* | :heavy_minus_sign: | MIME type of the file | application/pdf |
+| `public_url` | *Optional[str]* | :heavy_minus_sign: | Direct URL for file (public only if file access control is public-read) | https://epilot-files-prod.s3.eu-central-1.amazonaws.com/123/4d689aeb-1497-4410-a9fe-b36ca9ac4389/document.pdf |
+| `type` | [Optional[FileItemType]](../../models/shared/fileitemtype.md) | :heavy_minus_sign: | Human readable type for file | |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/fileitemaccesscontrol.md b/customer_portal/docs/models/shared/fileitemaccesscontrol.md
new file mode 100755
index 000000000..fb93666ca
--- /dev/null
+++ b/customer_portal/docs/models/shared/fileitemaccesscontrol.md
@@ -0,0 +1,9 @@
+# FileItemAccessControl
+
+
+## Values
+
+| Name | Value |
+| ------------- | ------------- |
+| `PRIVATE` | private |
+| `PUBLIC_READ` | public-read |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/fileitemrelations.md b/customer_portal/docs/models/shared/fileitemrelations.md
new file mode 100755
index 000000000..f2afbd58f
--- /dev/null
+++ b/customer_portal/docs/models/shared/fileitemrelations.md
@@ -0,0 +1,10 @@
+# FileItemRelations
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------- | --------------------------------------------------------- | --------------------------------------------------------- | --------------------------------------------------------- | --------------------------------------------------------- |
+| `schema` | [Optional[EntitySlug]](../../models/shared/entityslug.md) | :heavy_minus_sign: | URL-friendly identifier for the entity schema | contact |
+| `title` | *Optional[str]* | :heavy_minus_sign: | The title of the parent entity | Opportunity ABC |
+| `entity_id` | *Optional[str]* | :heavy_minus_sign: | The ID of the parent entity | d8dffa9a-6c90-4c4e-b8d1-032194b25526 |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/fileitemschema.md b/customer_portal/docs/models/shared/fileitemschema.md
new file mode 100755
index 000000000..f89d24203
--- /dev/null
+++ b/customer_portal/docs/models/shared/fileitemschema.md
@@ -0,0 +1,8 @@
+# FileItemSchema
+
+
+## Values
+
+| Name | Value |
+| ------ | ------ |
+| `FILE` | file |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/fileitemtype.md b/customer_portal/docs/models/shared/fileitemtype.md
new file mode 100755
index 000000000..d7a4dba0a
--- /dev/null
+++ b/customer_portal/docs/models/shared/fileitemtype.md
@@ -0,0 +1,21 @@
+# FileItemType
+
+Human readable type for file
+
+
+## Values
+
+| Name | Value |
+| ------------------- | ------------------- |
+| `DOCUMENT` | document |
+| `DOCUMENT_TEMPLATE` | document_template |
+| `TEXT` | text |
+| `IMAGE` | image |
+| `VIDEO` | video |
+| `AUDIO` | audio |
+| `SPREADSHEET` | spreadsheet |
+| `PRESENTATION` | presentation |
+| `FONT` | font |
+| `ARCHIVE` | archive |
+| `APPLICATION` | application |
+| `UNKNOWN` | unknown |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/fileschema.md b/customer_portal/docs/models/shared/fileschema.md
new file mode 100755
index 000000000..675e6f0bf
--- /dev/null
+++ b/customer_portal/docs/models/shared/fileschema.md
@@ -0,0 +1,8 @@
+# FileSchema
+
+
+## Values
+
+| Name | Value |
+| ------ | ------ |
+| `FILE` | file |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/grant.md b/customer_portal/docs/models/shared/grant.md
new file mode 100755
index 000000000..37f7ee110
--- /dev/null
+++ b/customer_portal/docs/models/shared/grant.md
@@ -0,0 +1,10 @@
+# Grant
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ----------------------------------------------------------- | ----------------------------------------------------------- | ----------------------------------------------------------- | ----------------------------------------------------------- | ----------------------------------------------------------- |
+| `action` | *str* | :heavy_check_mark: | Action for granting permission | entity-read |
+| `effect` | [Optional[GrantEffect]](../../models/shared/granteffect.md) | :heavy_minus_sign: | Effect of the permission | |
+| `resource` | *Optional[str]* | :heavy_minus_sign: | Resource for granting permission | entity:123:contact:f7c22299-ca72-4bca-8538-0a88eeefc947 |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/granteffect.md b/customer_portal/docs/models/shared/granteffect.md
new file mode 100755
index 000000000..b20d08f5a
--- /dev/null
+++ b/customer_portal/docs/models/shared/granteffect.md
@@ -0,0 +1,11 @@
+# GrantEffect
+
+Effect of the permission
+
+
+## Values
+
+| Name | Value |
+| ------- | ------- |
+| `ALLOW` | allow |
+| `DENY` | deny |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/installmentevent.md b/customer_portal/docs/models/shared/installmentevent.md
new file mode 100755
index 000000000..bb38d8c81
--- /dev/null
+++ b/customer_portal/docs/models/shared/installmentevent.md
@@ -0,0 +1,24 @@
+# InstallmentEvent
+
+A base billing event to be inherited by all billing events.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- |
+| `additional_properties` | Dict[str, *Any*] | :heavy_minus_sign: | N/A | |
+| `created_at` | [date](https://docs.python.org/3/library/datetime.html#date-objects) | :heavy_check_mark: | Creation timestamp of the entity | 2021-02-09T12:41:43.662Z |
+| `id` | *str* | :heavy_check_mark: | Entity ID | 5da0a718-c822-403d-9f5d-20d4584e0528 |
+| `org` | *str* | :heavy_check_mark: | Organization ID the entity belongs to | 123 |
+| `tags` | List[*str*] | :heavy_minus_sign: | Array of entity tags | example,mock |
+| `title` | *str* | :heavy_check_mark: | Title of the entity | Example Entity |
+| `updated_at` | [date](https://docs.python.org/3/library/datetime.html#date-objects) | :heavy_check_mark: | Last update timestamp of the entity | 2021-02-09T12:41:43.662Z |
+| `billing_amount` | *Optional[int]* | :heavy_minus_sign: | Amount to be paid in cents i.e. precision 2 | 10050 |
+| `billing_amount_decimal` | *Optional[str]* | :heavy_minus_sign: | Amount to be paid in cents in decimal string representation | 100.50 |
+| `billing_currency` | *Optional[str]* | :heavy_minus_sign: | Currency code in ISO 4217 format | EUR |
+| `contract` | [InstallmentEventContract](../../models/shared/installmenteventcontract.md) | :heavy_check_mark: | N/A | |
+| `due_date` | [datetime](https://docs.python.org/3/library/datetime.html#datetime-objects) | :heavy_check_mark: | Date on which the installment is due. | |
+| `external_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier for event, used to reference the event to a 3rd party resource such as a SAP Installment. | d4fb2a4e-3f74-4fc4-8fba-6fdaaaa3b08e |
+| `paid_date` | [datetime](https://docs.python.org/3/library/datetime.html#datetime-objects) | :heavy_minus_sign: | Date on which the installment is paid by the customer. | |
+| `type` | [InstallmentEventType](../../models/shared/installmenteventtype.md) | :heavy_check_mark: | Type of the billing event. | installment |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/installmenteventcontract.md b/customer_portal/docs/models/shared/installmenteventcontract.md
new file mode 100755
index 000000000..11fad2234
--- /dev/null
+++ b/customer_portal/docs/models/shared/installmenteventcontract.md
@@ -0,0 +1,8 @@
+# InstallmentEventContract
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- |
+| `dollar_relation` | List[[InstallmentEventContractDollarRelation](../../models/shared/installmenteventcontractdollarrelation.md)] | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/installmenteventcontractdollarrelation.md b/customer_portal/docs/models/shared/installmenteventcontractdollarrelation.md
new file mode 100755
index 000000000..e8c074a72
--- /dev/null
+++ b/customer_portal/docs/models/shared/installmenteventcontractdollarrelation.md
@@ -0,0 +1,8 @@
+# InstallmentEventContractDollarRelation
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ |
+| `entity_id` | *Optional[str]* | :heavy_minus_sign: | Entity ID for the related contract. | f589786b-3024-43cd-9cb3-5a3c953f2896 |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/installmenteventtype.md b/customer_portal/docs/models/shared/installmenteventtype.md
new file mode 100755
index 000000000..745befc04
--- /dev/null
+++ b/customer_portal/docs/models/shared/installmenteventtype.md
@@ -0,0 +1,10 @@
+# InstallmentEventType
+
+Type of the billing event.
+
+
+## Values
+
+| Name | Value |
+| ------------- | ------------- |
+| `INSTALLMENT` | installment |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/opportunity.md b/customer_portal/docs/models/shared/opportunity.md
new file mode 100755
index 000000000..30781f133
--- /dev/null
+++ b/customer_portal/docs/models/shared/opportunity.md
@@ -0,0 +1,17 @@
+# Opportunity
+
+The opportunity entity
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- |
+| `additional_properties` | Dict[str, *Any*] | :heavy_minus_sign: | N/A | |
+| `created_at` | [date](https://docs.python.org/3/library/datetime.html#date-objects) | :heavy_check_mark: | Creation timestamp of the entity | 2021-02-09T12:41:43.662Z |
+| `id` | *str* | :heavy_check_mark: | Entity ID | 5da0a718-c822-403d-9f5d-20d4584e0528 |
+| `org` | *str* | :heavy_check_mark: | Organization ID the entity belongs to | 123 |
+| `schema` | [OpportunitySchema](../../models/shared/opportunityschema.md) | :heavy_check_mark: | N/A | |
+| `tags` | List[*str*] | :heavy_minus_sign: | Array of entity tags | example,mock |
+| `title` | *str* | :heavy_check_mark: | Title of the entity | Example Entity |
+| `updated_at` | [date](https://docs.python.org/3/library/datetime.html#date-objects) | :heavy_check_mark: | Last update timestamp of the entity | 2021-02-09T12:41:43.662Z |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/opportunityschema.md b/customer_portal/docs/models/shared/opportunityschema.md
new file mode 100755
index 000000000..e62cc3593
--- /dev/null
+++ b/customer_portal/docs/models/shared/opportunityschema.md
@@ -0,0 +1,8 @@
+# OpportunitySchema
+
+
+## Values
+
+| Name | Value |
+| ------------- | ------------- |
+| `OPPORTUNITY` | opportunity |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/order.md b/customer_portal/docs/models/shared/order.md
new file mode 100755
index 000000000..e9162adce
--- /dev/null
+++ b/customer_portal/docs/models/shared/order.md
@@ -0,0 +1,17 @@
+# Order
+
+The order entity
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- |
+| `additional_properties` | Dict[str, *Any*] | :heavy_minus_sign: | N/A | |
+| `created_at` | [date](https://docs.python.org/3/library/datetime.html#date-objects) | :heavy_check_mark: | Creation timestamp of the entity | 2021-02-09T12:41:43.662Z |
+| `id` | *str* | :heavy_check_mark: | Entity ID | 5da0a718-c822-403d-9f5d-20d4584e0528 |
+| `org` | *str* | :heavy_check_mark: | Organization ID the entity belongs to | 123 |
+| `schema` | [OrderSchema](../../models/shared/orderschema.md) | :heavy_check_mark: | N/A | |
+| `tags` | List[*str*] | :heavy_minus_sign: | Array of entity tags | example,mock |
+| `title` | *str* | :heavy_check_mark: | Title of the entity | Example Entity |
+| `updated_at` | [date](https://docs.python.org/3/library/datetime.html#date-objects) | :heavy_check_mark: | Last update timestamp of the entity | 2021-02-09T12:41:43.662Z |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/orderschema.md b/customer_portal/docs/models/shared/orderschema.md
new file mode 100755
index 000000000..3dc7b99a9
--- /dev/null
+++ b/customer_portal/docs/models/shared/orderschema.md
@@ -0,0 +1,8 @@
+# OrderSchema
+
+
+## Values
+
+| Name | Value |
+| ------- | ------- |
+| `ORDER` | order |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/organizationsettings.md b/customer_portal/docs/models/shared/organizationsettings.md
new file mode 100755
index 000000000..ea8ca3d52
--- /dev/null
+++ b/customer_portal/docs/models/shared/organizationsettings.md
@@ -0,0 +1,26 @@
+# OrganizationSettings
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| --------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- |
+| `automation_entity_mapping` | [Optional[OrganizationSettingsAutomationEntityMapping]](../../models/shared/organizationsettingsautomationentitymapping.md) | :heavy_minus_sign: | N/A |
+| `automation_preview` | [Optional[OrganizationSettingsAutomationPreview]](../../models/shared/organizationsettingsautomationpreview.md) | :heavy_minus_sign: | N/A |
+| `central_inbox_preview_setting` | [Optional[OrganizationSettingsCentralInboxPreviewSetting]](../../models/shared/organizationsettingscentralinboxpreviewsetting.md) | :heavy_minus_sign: | N/A |
+| `contracts_preview_setting` | [Optional[OrganizationSettingsContractsPreviewSetting]](../../models/shared/organizationsettingscontractspreviewsetting.md) | :heavy_minus_sign: | N/A |
+| `disable_ivy` | [Optional[OrganizationSettingsDisableIvy]](../../models/shared/organizationsettingsdisableivy.md) | :heavy_minus_sign: | N/A |
+| `double_opt_in` | [Optional[OrganizationSettingsDoubleOptIn]](../../models/shared/organizationsettingsdoubleoptin.md) | :heavy_minus_sign: | N/A |
+| `ecommerce_catalog_preview` | [Optional[OrganizationSettingsEcommerceCatalogPreview]](../../models/shared/organizationsettingsecommercecatalogpreview.md) | :heavy_minus_sign: | N/A |
+| `ecommerce_opportunities_preview` | [Optional[OrganizationSettingsEcommerceOpportunitiesPreview]](../../models/shared/organizationsettingsecommerceopportunitiespreview.md) | :heavy_minus_sign: | N/A |
+| `ecommerce_preview` | [Optional[OrganizationSettingsEcommercePreview]](../../models/shared/organizationsettingsecommercepreview.md) | :heavy_minus_sign: | N/A |
+| `end_customer_portal` | [Optional[OrganizationSettingsEndCustomerPortal]](../../models/shared/organizationsettingsendcustomerportal.md) | :heavy_minus_sign: | N/A |
+| `entity_schema_builder` | [Optional[OrganizationSettingsEntitySchemaBuilder]](../../models/shared/organizationsettingsentityschemabuilder.md) | :heavy_minus_sign: | N/A |
+| `installer_portal` | [Optional[OrganizationSettingsInstallerPortal]](../../models/shared/organizationsettingsinstallerportal.md) | :heavy_minus_sign: | N/A |
+| `logic_editor_preview` | [Optional[OrganizationSettingsLogicEditorPreview]](../../models/shared/organizationsettingslogiceditorpreview.md) | :heavy_minus_sign: | N/A |
+| `new_navigation` | [Optional[OrganizationSettingsNewNavigation]](../../models/shared/organizationsettingsnewnavigation.md) | :heavy_minus_sign: | N/A |
+| `partnering` | [Optional[OrganizationSettingsPartnering]](../../models/shared/organizationsettingspartnering.md) | :heavy_minus_sign: | N/A |
+| `product_availability` | [Optional[OrganizationSettingsProductAvailability]](../../models/shared/organizationsettingsproductavailability.md) | :heavy_minus_sign: | N/A |
+| `sso` | [Optional[OrganizationSettingsSso]](../../models/shared/organizationsettingssso.md) | :heavy_minus_sign: | N/A |
+| `submission_preview` | [Optional[OrganizationSettingsSubmissionPreview]](../../models/shared/organizationsettingssubmissionpreview.md) | :heavy_minus_sign: | N/A |
+| `user_roles_preview` | [Optional[OrganizationSettingsUserRolesPreview]](../../models/shared/organizationsettingsuserrolespreview.md) | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/organizationsettingsautomationentitymapping.md b/customer_portal/docs/models/shared/organizationsettingsautomationentitymapping.md
new file mode 100755
index 000000000..7866db84d
--- /dev/null
+++ b/customer_portal/docs/models/shared/organizationsettingsautomationentitymapping.md
@@ -0,0 +1,8 @@
+# OrganizationSettingsAutomationEntityMapping
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------- | ---------------------------------------- | ---------------------------------------- | ---------------------------------------- |
+| `enabled` | *Optional[bool]* | :heavy_minus_sign: | Enable/Disable automation entity mapping |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/organizationsettingsautomationpreview.md b/customer_portal/docs/models/shared/organizationsettingsautomationpreview.md
new file mode 100755
index 000000000..6ea8844e6
--- /dev/null
+++ b/customer_portal/docs/models/shared/organizationsettingsautomationpreview.md
@@ -0,0 +1,8 @@
+# OrganizationSettingsAutomationPreview
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| --------------------------------- | --------------------------------- | --------------------------------- | --------------------------------- |
+| `enabled` | *Optional[bool]* | :heavy_minus_sign: | Enable/Disable automation preview |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/organizationsettingscentralinboxpreviewsetting.md b/customer_portal/docs/models/shared/organizationsettingscentralinboxpreviewsetting.md
new file mode 100755
index 000000000..e82299e41
--- /dev/null
+++ b/customer_portal/docs/models/shared/organizationsettingscentralinboxpreviewsetting.md
@@ -0,0 +1,8 @@
+# OrganizationSettingsCentralInboxPreviewSetting
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------- | -------------------------------------------- | -------------------------------------------- | -------------------------------------------- |
+| `enabled` | *Optional[bool]* | :heavy_minus_sign: | Enable/Disable central inbox preview setting |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/organizationsettingscontractspreviewsetting.md b/customer_portal/docs/models/shared/organizationsettingscontractspreviewsetting.md
new file mode 100755
index 000000000..4cfc44bb7
--- /dev/null
+++ b/customer_portal/docs/models/shared/organizationsettingscontractspreviewsetting.md
@@ -0,0 +1,8 @@
+# OrganizationSettingsContractsPreviewSetting
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------- | ---------------------------------------- | ---------------------------------------- | ---------------------------------------- |
+| `enabled` | *Optional[bool]* | :heavy_minus_sign: | Enable/Disable contracts preview setting |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/organizationsettingsdisableivy.md b/customer_portal/docs/models/shared/organizationsettingsdisableivy.md
new file mode 100755
index 000000000..de15e0fbb
--- /dev/null
+++ b/customer_portal/docs/models/shared/organizationsettingsdisableivy.md
@@ -0,0 +1,8 @@
+# OrganizationSettingsDisableIvy
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------ | ------------------ | ------------------ | ------------------ |
+| `enabled` | *Optional[bool]* | :heavy_minus_sign: | Enable/Disable Ivy |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/organizationsettingsdoubleoptin.md b/customer_portal/docs/models/shared/organizationsettingsdoubleoptin.md
new file mode 100755
index 000000000..df90f3edc
--- /dev/null
+++ b/customer_portal/docs/models/shared/organizationsettingsdoubleoptin.md
@@ -0,0 +1,8 @@
+# OrganizationSettingsDoubleOptIn
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------- | ---------------------------- | ---------------------------- | ---------------------------- |
+| `enabled` | *Optional[bool]* | :heavy_minus_sign: | Enable/Disable double opt-in |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/organizationsettingsecommercecatalogpreview.md b/customer_portal/docs/models/shared/organizationsettingsecommercecatalogpreview.md
new file mode 100755
index 000000000..5fd4b1df6
--- /dev/null
+++ b/customer_portal/docs/models/shared/organizationsettingsecommercecatalogpreview.md
@@ -0,0 +1,8 @@
+# OrganizationSettingsEcommerceCatalogPreview
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------- | ---------------------------------------- | ---------------------------------------- | ---------------------------------------- |
+| `enabled` | *Optional[bool]* | :heavy_minus_sign: | Enable/Disable ecommerce catalog preview |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/organizationsettingsecommerceopportunitiespreview.md b/customer_portal/docs/models/shared/organizationsettingsecommerceopportunitiespreview.md
new file mode 100755
index 000000000..752f97207
--- /dev/null
+++ b/customer_portal/docs/models/shared/organizationsettingsecommerceopportunitiespreview.md
@@ -0,0 +1,8 @@
+# OrganizationSettingsEcommerceOpportunitiesPreview
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- |
+| `enabled` | *Optional[bool]* | :heavy_minus_sign: | Enable/Disable ecommerce opportunities preview |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/organizationsettingsecommercepreview.md b/customer_portal/docs/models/shared/organizationsettingsecommercepreview.md
new file mode 100755
index 000000000..917e2efba
--- /dev/null
+++ b/customer_portal/docs/models/shared/organizationsettingsecommercepreview.md
@@ -0,0 +1,8 @@
+# OrganizationSettingsEcommercePreview
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------- | -------------------------------- | -------------------------------- | -------------------------------- |
+| `enabled` | *Optional[bool]* | :heavy_minus_sign: | Enable/Disable ecommerce preview |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/organizationsettingsendcustomerportal.md b/customer_portal/docs/models/shared/organizationsettingsendcustomerportal.md
new file mode 100755
index 000000000..3236f0541
--- /dev/null
+++ b/customer_portal/docs/models/shared/organizationsettingsendcustomerportal.md
@@ -0,0 +1,8 @@
+# OrganizationSettingsEndCustomerPortal
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------- | ---------------------------------- | ---------------------------------- | ---------------------------------- |
+| `enabled` | *Optional[bool]* | :heavy_minus_sign: | Enable/Disable end customer portal |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/organizationsettingsentityschemabuilder.md b/customer_portal/docs/models/shared/organizationsettingsentityschemabuilder.md
new file mode 100755
index 000000000..d9dc1d412
--- /dev/null
+++ b/customer_portal/docs/models/shared/organizationsettingsentityschemabuilder.md
@@ -0,0 +1,8 @@
+# OrganizationSettingsEntitySchemaBuilder
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ |
+| `enabled` | *Optional[bool]* | :heavy_minus_sign: | Enable/Disable entity schema builder |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/organizationsettingsinstallerportal.md b/customer_portal/docs/models/shared/organizationsettingsinstallerportal.md
new file mode 100755
index 000000000..4b3d3c3f7
--- /dev/null
+++ b/customer_portal/docs/models/shared/organizationsettingsinstallerportal.md
@@ -0,0 +1,8 @@
+# OrganizationSettingsInstallerPortal
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- |
+| `enabled` | *Optional[bool]* | :heavy_minus_sign: | Enable/Disable installer portal |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/organizationsettingslogiceditorpreview.md b/customer_portal/docs/models/shared/organizationsettingslogiceditorpreview.md
new file mode 100755
index 000000000..452420eef
--- /dev/null
+++ b/customer_portal/docs/models/shared/organizationsettingslogiceditorpreview.md
@@ -0,0 +1,8 @@
+# OrganizationSettingsLogicEditorPreview
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------------------------------- | ----------------------------------- | ----------------------------------- | ----------------------------------- |
+| `enabled` | *Optional[bool]* | :heavy_minus_sign: | Enable/Disable logic editor preview |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/organizationsettingsnewnavigation.md b/customer_portal/docs/models/shared/organizationsettingsnewnavigation.md
new file mode 100755
index 000000000..2faa8eb1e
--- /dev/null
+++ b/customer_portal/docs/models/shared/organizationsettingsnewnavigation.md
@@ -0,0 +1,8 @@
+# OrganizationSettingsNewNavigation
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------------------------- | ----------------------------- | ----------------------------- | ----------------------------- |
+| `enabled` | *Optional[bool]* | :heavy_minus_sign: | Enable/Disable new navigation |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/organizationsettingspartnering.md b/customer_portal/docs/models/shared/organizationsettingspartnering.md
new file mode 100755
index 000000000..4c716ca65
--- /dev/null
+++ b/customer_portal/docs/models/shared/organizationsettingspartnering.md
@@ -0,0 +1,8 @@
+# OrganizationSettingsPartnering
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------- | ------------------------- | ------------------------- | ------------------------- |
+| `enabled` | *Optional[bool]* | :heavy_minus_sign: | Enable/Disable partnering |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/organizationsettingsproductavailability.md b/customer_portal/docs/models/shared/organizationsettingsproductavailability.md
new file mode 100755
index 000000000..1237c3c70
--- /dev/null
+++ b/customer_portal/docs/models/shared/organizationsettingsproductavailability.md
@@ -0,0 +1,8 @@
+# OrganizationSettingsProductAvailability
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------------------------------- | ----------------------------------- | ----------------------------------- | ----------------------------------- |
+| `enabled` | *Optional[bool]* | :heavy_minus_sign: | Enable/Disable product availability |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/organizationsettingssso.md b/customer_portal/docs/models/shared/organizationsettingssso.md
new file mode 100755
index 000000000..6155c5eb8
--- /dev/null
+++ b/customer_portal/docs/models/shared/organizationsettingssso.md
@@ -0,0 +1,8 @@
+# OrganizationSettingsSso
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------------------------------- | ----------------------------------- | ----------------------------------- | ----------------------------------- |
+| `enabled` | *Optional[bool]* | :heavy_minus_sign: | Enable/Disable single sign-on (SSO) |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/organizationsettingssubmissionpreview.md b/customer_portal/docs/models/shared/organizationsettingssubmissionpreview.md
new file mode 100755
index 000000000..bdeb2662e
--- /dev/null
+++ b/customer_portal/docs/models/shared/organizationsettingssubmissionpreview.md
@@ -0,0 +1,8 @@
+# OrganizationSettingsSubmissionPreview
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| --------------------------------- | --------------------------------- | --------------------------------- | --------------------------------- |
+| `enabled` | *Optional[bool]* | :heavy_minus_sign: | Enable/Disable submission preview |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/organizationsettingsuserrolespreview.md b/customer_portal/docs/models/shared/organizationsettingsuserrolespreview.md
new file mode 100755
index 000000000..449ebde8c
--- /dev/null
+++ b/customer_portal/docs/models/shared/organizationsettingsuserrolespreview.md
@@ -0,0 +1,8 @@
+# OrganizationSettingsUserRolesPreview
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| --------------------------------- | --------------------------------- | --------------------------------- | --------------------------------- |
+| `enabled` | *Optional[bool]* | :heavy_minus_sign: | Enable/Disable user roles preview |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/origin.md b/customer_portal/docs/models/shared/origin.md
new file mode 100755
index 000000000..99cea63a2
--- /dev/null
+++ b/customer_portal/docs/models/shared/origin.md
@@ -0,0 +1,11 @@
+# Origin
+
+Origin of the portal
+
+
+## Values
+
+| Name | Value |
+| --------------------- | --------------------- |
+| `END_CUSTOMER_PORTAL` | END_CUSTOMER_PORTAL |
+| `INSTALLER_PORTAL` | INSTALLER_PORTAL |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/portalconfig.md b/customer_portal/docs/models/shared/portalconfig.md
new file mode 100755
index 000000000..8d4c0d933
--- /dev/null
+++ b/customer_portal/docs/models/shared/portalconfig.md
@@ -0,0 +1,30 @@
+# PortalConfig
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `cognito_details` | [Optional[PortalConfigCognitoDetails]](../../models/shared/portalconfigcognitodetails.md) | :heavy_minus_sign: | AWS Cognito Pool details for the portal | |
+| `config` | *Optional[str]* | :heavy_minus_sign: | Stringified object with configuration details | |
+| `contact_identifiers` | List[*str*] | :heavy_minus_sign: | Identifiers to identify a contact. | email,last_name |
+| ~~`contact_secondary_identifier`~~ | *Optional[str]* | :heavy_minus_sign: | : warning: ** DEPRECATED **: This will be removed in a future release, please migrate away from it as soon as possible.
Secondary identifier to identify a contact other than the email | full_name |
+| `default_user_to_notify` | [Optional[PortalConfigDefaultUserToNotify]](../../models/shared/portalconfigdefaultusertonotify.md) | :heavy_minus_sign: | Default 360 user to notify upon an internal notification | |
+| `design_id` | *str* | :heavy_check_mark: | ID of the design used to build the portal | 9ba94f20-b872-4217-a259-2a90a8ee1a29 |
+| `domain` | *Optional[str]* | :heavy_minus_sign: | The URL on which the portal is accessible | abc.com |
+| `email_templates` | [Optional[EmailTemplates]](../../models/shared/emailtemplates.md) | :heavy_minus_sign: | Email templates used for authentication and internal processes | |
+| `enabled` | *Optional[bool]* | :heavy_minus_sign: | Enable/Disable the portal access | |
+| `entity_actions` | List[[PortalConfigEntityActions](../../models/shared/portalconfigentityactions.md)] | :heavy_minus_sign: | Journey actions allowed on an entity by a portal user | |
+| `entity_edit_rules` | List[[PortalConfigEntityEditRules](../../models/shared/portalconfigentityeditrules.md)] | :heavy_minus_sign: | Rules for editing an entity by a portal user | |
+| `entity_identifiers` | [Optional[PortalConfigEntityIdentifiers]](../../models/shared/portalconfigentityidentifiers.md) | :heavy_minus_sign: | Identifiers used to identify an entity by a portal user | |
+| `feature_settings` | [Optional[PortalConfigFeatureSettings]](../../models/shared/portalconfigfeaturesettings.md) | :heavy_minus_sign: | Feature settings for the portal | |
+| `grants` | List[[Grant](../../models/shared/grant.md)] | :heavy_minus_sign: | Permissions granted to a portal user while accessing entities | |
+| `id` | *Optional[str]* | :heavy_minus_sign: | ID of the organization | 12345 |
+| `images` | [Optional[PortalConfigImages]](../../models/shared/portalconfigimages.md) | :heavy_minus_sign: | Teaser & Banner Image web links | |
+| `is_epilot_domain` | *Optional[bool]* | :heavy_minus_sign: | Mark true if the domain is an Epilot domain | |
+| `name` | *Optional[str]* | :heavy_minus_sign: | A short name to identify your portal | Installer Portal |
+| `org_name` | *Optional[str]* | :heavy_minus_sign: | Name of the organization | ABC Company |
+| `org_settings` | [Optional[PortalConfigOrgSettings]](../../models/shared/portalconfigorgsettings.md) | :heavy_minus_sign: | Organization settings | |
+| `origin` | [Optional[Origin]](../../models/shared/origin.md) | :heavy_minus_sign: | Origin of the portal | |
+| ~~`self_registration`~~ | *Optional[bool]* | :heavy_minus_sign: | : warning: ** DEPRECATED **: This will be removed in a future release, please migrate away from it as soon as possible.
Allow portal user self-registration without a mapped contact | false |
+| `self_registration_setting` | [Optional[PortalConfigSelfRegistrationSetting]](../../models/shared/portalconfigselfregistrationsetting.md) | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/portalconfigcognitodetails.md b/customer_portal/docs/models/shared/portalconfigcognitodetails.md
new file mode 100755
index 000000000..32f6a1569
--- /dev/null
+++ b/customer_portal/docs/models/shared/portalconfigcognitodetails.md
@@ -0,0 +1,12 @@
+# PortalConfigCognitoDetails
+
+AWS Cognito Pool details for the portal
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------------------------------------------------------------- |
+| `cognito_user_pool_arn` | *Optional[str]* | :heavy_minus_sign: | Cognito user pool ARN | arn:aws:cognito-idp:us-east-1:123412341234:userpool/us-east-1_123412341 |
+| `cognito_user_pool_client_id` | *Optional[str]* | :heavy_minus_sign: | Cognito user pool client ID | 6bsd0jkgoie74k2i8mrhc1vest |
+| `cognito_user_pool_id` | *Optional[str]* | :heavy_minus_sign: | Cognito user pool ID | eu-central-1_CUEQRNbUb |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/portalconfigdefaultusertonotify.md b/customer_portal/docs/models/shared/portalconfigdefaultusertonotify.md
new file mode 100755
index 000000000..e53e989d3
--- /dev/null
+++ b/customer_portal/docs/models/shared/portalconfigdefaultusertonotify.md
@@ -0,0 +1,10 @@
+# PortalConfigDefaultUserToNotify
+
+Default 360 user to notify upon an internal notification
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------------------------------------------------------- | ----------------------------------------------------------- | ----------------------------------------------------------- | ----------------------------------------------------------- |
+| `on_pending_user` | List[[AdminUser](../../models/shared/adminuser.md)] | :heavy_minus_sign: | Default admin users for pending user notification to notify |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/portalconfigentityactions.md b/customer_portal/docs/models/shared/portalconfigentityactions.md
new file mode 100755
index 000000000..20cf38fdf
--- /dev/null
+++ b/customer_portal/docs/models/shared/portalconfigentityactions.md
@@ -0,0 +1,10 @@
+# PortalConfigEntityActions
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- |
+| `action_label` | [Optional[PortalConfigEntityActionsActionLabel]](../../models/shared/portalconfigentityactionsactionlabel.md) | :heavy_minus_sign: | N/A | |
+| `journey_id` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `slug` | [Optional[EntitySlug]](../../models/shared/entityslug.md) | :heavy_minus_sign: | URL-friendly identifier for the entity schema | contact |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/portalconfigentityactionsactionlabel.md b/customer_portal/docs/models/shared/portalconfigentityactionsactionlabel.md
new file mode 100755
index 000000000..68d4ea668
--- /dev/null
+++ b/customer_portal/docs/models/shared/portalconfigentityactionsactionlabel.md
@@ -0,0 +1,9 @@
+# PortalConfigEntityActionsActionLabel
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------ | ------------------ | ------------------ | ------------------ |
+| `de` | *Optional[str]* | :heavy_minus_sign: | N/A |
+| `en` | *Optional[str]* | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/portalconfigentityeditrules.md b/customer_portal/docs/models/shared/portalconfigentityeditrules.md
new file mode 100755
index 000000000..c4f440579
--- /dev/null
+++ b/customer_portal/docs/models/shared/portalconfigentityeditrules.md
@@ -0,0 +1,17 @@
+# PortalConfigEntityEditRules
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ----------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- |
+| `allowed_decrement` | *Optional[str]* | :heavy_minus_sign: | N/A | 10% |
+| `allowed_increment` | *Optional[str]* | :heavy_minus_sign: | N/A | 10% |
+| `attribute` | *Optional[str]* | :heavy_minus_sign: | N/A | first_name |
+| `cadence_period` | *Optional[float]* | :heavy_minus_sign: | N/A | 1 |
+| `cadence_period_type` | [Optional[PortalConfigEntityEditRulesCadencePeriodType]](../../models/shared/portalconfigentityeditrulescadenceperiodtype.md) | :heavy_minus_sign: | N/A | |
+| `changes_allowed` | *Optional[int]* | :heavy_minus_sign: | N/A | 1 |
+| `grace_period` | *Optional[int]* | :heavy_minus_sign: | N/A | 1 |
+| `number_of_days_before_restriction` | *Optional[int]* | :heavy_minus_sign: | N/A | 10 |
+| `rule_type` | [Optional[PortalConfigEntityEditRulesRuleType]](../../models/shared/portalconfigentityeditrulesruletype.md) | :heavy_minus_sign: | N/A | |
+| `slug` | [Optional[EntitySlug]](../../models/shared/entityslug.md) | :heavy_minus_sign: | URL-friendly identifier for the entity schema | contact |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/portalconfigentityeditrulescadenceperiodtype.md b/customer_portal/docs/models/shared/portalconfigentityeditrulescadenceperiodtype.md
new file mode 100755
index 000000000..dad864c2a
--- /dev/null
+++ b/customer_portal/docs/models/shared/portalconfigentityeditrulescadenceperiodtype.md
@@ -0,0 +1,10 @@
+# PortalConfigEntityEditRulesCadencePeriodType
+
+
+## Values
+
+| Name | Value |
+| -------- | -------- |
+| `DAYS` | days |
+| `WEEKS` | weeks |
+| `MONTHS` | months |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/portalconfigentityeditrulesruletype.md b/customer_portal/docs/models/shared/portalconfigentityeditrulesruletype.md
new file mode 100755
index 000000000..69e50a98c
--- /dev/null
+++ b/customer_portal/docs/models/shared/portalconfigentityeditrulesruletype.md
@@ -0,0 +1,11 @@
+# PortalConfigEntityEditRulesRuleType
+
+
+## Values
+
+| Name | Value |
+| --------------------------- | --------------------------- |
+| `CADENCE` | cadence |
+| `RELATIVE_TO_CURRENT_VALUE` | relative_to_current_value |
+| `DAYS_BEFORE_DATE` | days_before_date |
+| `OVERDUE_PAYMENTS` | overdue_payments |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/portalconfigentityidentifiers.md b/customer_portal/docs/models/shared/portalconfigentityidentifiers.md
new file mode 100755
index 000000000..63161bea3
--- /dev/null
+++ b/customer_portal/docs/models/shared/portalconfigentityidentifiers.md
@@ -0,0 +1,10 @@
+# PortalConfigEntityIdentifiers
+
+Identifiers used to identify an entity by a portal user
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- |
+| `type` | [Optional[PortalConfigEntityIdentifiersType]](../../models/shared/portalconfigentityidentifierstype.md) | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/portalconfigentityidentifierstype.md b/customer_portal/docs/models/shared/portalconfigentityidentifierstype.md
new file mode 100755
index 000000000..28baee4a2
--- /dev/null
+++ b/customer_portal/docs/models/shared/portalconfigentityidentifierstype.md
@@ -0,0 +1,9 @@
+# PortalConfigEntityIdentifiersType
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------- | ------------------------------------- | ------------------------------------- | ------------------------------------- | ------------------------------------- |
+| `attributes` | List[*str*] | :heavy_minus_sign: | Attributes used to identify an entity | contract_number |
+| `is_enabled` | *Optional[bool]* | :heavy_minus_sign: | Enable/Disable the entity identifier | |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/portalconfigfeaturesettings.md b/customer_portal/docs/models/shared/portalconfigfeaturesettings.md
new file mode 100755
index 000000000..ce88c965b
--- /dev/null
+++ b/customer_portal/docs/models/shared/portalconfigfeaturesettings.md
@@ -0,0 +1,11 @@
+# PortalConfigFeatureSettings
+
+Feature settings for the portal
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------------------- | ----------------------- | ----------------------- | ----------------------- |
+| `billing` | *Optional[bool]* | :heavy_minus_sign: | Billing feature flag |
+| `start_page` | *Optional[bool]* | :heavy_minus_sign: | Start page feature flag |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/portalconfigimages.md b/customer_portal/docs/models/shared/portalconfigimages.md
new file mode 100755
index 000000000..db3df1a51
--- /dev/null
+++ b/customer_portal/docs/models/shared/portalconfigimages.md
@@ -0,0 +1,12 @@
+# PortalConfigImages
+
+Teaser & Banner Image web links
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
+| `order_left_teaser` | *Optional[str]* | :heavy_minus_sign: | URL of the order left teaser image | https://epilot-bucket.s3.eu-central-1.amazonaws.com/12344/6538fddb-f0e9-4f0f-af51-6e57891ff20a/order-left-teaser.jpeg |
+| `order_right_teaser` | *Optional[str]* | :heavy_minus_sign: | URL of the order right teaser image | https://epilot-bucket.s3.eu-central-1.amazonaws.com/12344/6538fddb-f0e9-4f0f-af51-6e57891ff20a/order-right-teaser.jpeg |
+| `welcome_banner` | *Optional[str]* | :heavy_minus_sign: | URL of the welcome banner image | https://epilot-bucket.s3.eu-central-1.amazonaws.com/12344/6538fddb-f0e9-4f0f-af51-6e57891ff20a/welcome-banner.jpeg |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/portalconfigorgsettings.md b/customer_portal/docs/models/shared/portalconfigorgsettings.md
new file mode 100755
index 000000000..9a8d4932b
--- /dev/null
+++ b/customer_portal/docs/models/shared/portalconfigorgsettings.md
@@ -0,0 +1,11 @@
+# PortalConfigOrgSettings
+
+Organization settings
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- |
+| `canary` | [Optional[PortalConfigOrgSettingsCanary]](../../models/shared/portalconfigorgsettingscanary.md) | :heavy_minus_sign: | Canary feature flag |
+| `release_candidate` | [Optional[PortalConfigOrgSettingsReleaseCandidate]](../../models/shared/portalconfigorgsettingsreleasecandidate.md) | :heavy_minus_sign: | Release candidate settings |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/portalconfigorgsettingscanary.md b/customer_portal/docs/models/shared/portalconfigorgsettingscanary.md
new file mode 100755
index 000000000..564efa539
--- /dev/null
+++ b/customer_portal/docs/models/shared/portalconfigorgsettingscanary.md
@@ -0,0 +1,10 @@
+# PortalConfigOrgSettingsCanary
+
+Canary feature flag
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| --------------------------------- | --------------------------------- | --------------------------------- | --------------------------------- |
+| `enabled` | *Optional[bool]* | :heavy_minus_sign: | Enable/Disable the canary feature |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/portalconfigorgsettingsreleasecandidate.md b/customer_portal/docs/models/shared/portalconfigorgsettingsreleasecandidate.md
new file mode 100755
index 000000000..66d495b47
--- /dev/null
+++ b/customer_portal/docs/models/shared/portalconfigorgsettingsreleasecandidate.md
@@ -0,0 +1,10 @@
+# PortalConfigOrgSettingsReleaseCandidate
+
+Release candidate settings
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------- | -------------------------------------------- | -------------------------------------------- | -------------------------------------------- |
+| `enabled` | *Optional[bool]* | :heavy_minus_sign: | Enable/Disable the release candidate feature |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/portalconfigselfregistrationsetting.md b/customer_portal/docs/models/shared/portalconfigselfregistrationsetting.md
new file mode 100755
index 000000000..c701a165d
--- /dev/null
+++ b/customer_portal/docs/models/shared/portalconfigselfregistrationsetting.md
@@ -0,0 +1,10 @@
+# PortalConfigSelfRegistrationSetting
+
+
+## Values
+
+| Name | Value |
+| -------------------------------- | -------------------------------- |
+| `ALLOW_WITH_CONTACT_CREATION` | ALLOW_WITH_CONTACT_CREATION |
+| `ALLOW_WITHOUT_CONTACT_CREATION` | ALLOW_WITHOUT_CONTACT_CREATION |
+| `DENY` | DENY |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/portaluser.md b/customer_portal/docs/models/shared/portaluser.md
new file mode 100755
index 000000000..1a5888dcc
--- /dev/null
+++ b/customer_portal/docs/models/shared/portaluser.md
@@ -0,0 +1,17 @@
+# PortalUser
+
+The portal user entity
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- |
+| `additional_properties` | Dict[str, *Any*] | :heavy_minus_sign: | N/A | |
+| `created_at` | [date](https://docs.python.org/3/library/datetime.html#date-objects) | :heavy_check_mark: | Creation timestamp of the entity | 2021-02-09T12:41:43.662Z |
+| `id` | *str* | :heavy_check_mark: | Entity ID | 5da0a718-c822-403d-9f5d-20d4584e0528 |
+| `org` | *str* | :heavy_check_mark: | Organization ID the entity belongs to | 123 |
+| `schema` | [PortalUserSchema](../../models/shared/portaluserschema.md) | :heavy_check_mark: | N/A | |
+| `tags` | List[*str*] | :heavy_minus_sign: | Array of entity tags | example,mock |
+| `title` | *str* | :heavy_check_mark: | Title of the entity | Example Entity |
+| `updated_at` | [date](https://docs.python.org/3/library/datetime.html#date-objects) | :heavy_check_mark: | Last update timestamp of the entity | 2021-02-09T12:41:43.662Z |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/portaluserschema.md b/customer_portal/docs/models/shared/portaluserschema.md
new file mode 100755
index 000000000..0b4114a6e
--- /dev/null
+++ b/customer_portal/docs/models/shared/portaluserschema.md
@@ -0,0 +1,8 @@
+# PortalUserSchema
+
+
+## Values
+
+| Name | Value |
+| ------------- | ------------- |
+| `PORTAL_USER` | portal_user |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/portalwidget.md b/customer_portal/docs/models/shared/portalwidget.md
new file mode 100755
index 000000000..d77173a45
--- /dev/null
+++ b/customer_portal/docs/models/shared/portalwidget.md
@@ -0,0 +1,35 @@
+# PortalWidget
+
+
+## Supported Types
+
+### EntityWidget
+
+```python
+portalWidget: shared.EntityWidget = /* values here */
+```
+
+### ContentWidget
+
+```python
+portalWidget: shared.ContentWidget = /* values here */
+```
+
+### ActionWidget
+
+```python
+portalWidget: shared.ActionWidget = /* values here */
+```
+
+### TeaserWidget
+
+```python
+portalWidget: shared.TeaserWidget = /* values here */
+```
+
+### WidgetBase
+
+```python
+portalWidget: shared.WidgetBase = /* values here */
+```
+
diff --git a/customer_portal/docs/models/shared/product.md b/customer_portal/docs/models/shared/product.md
new file mode 100755
index 000000000..60f996ed4
--- /dev/null
+++ b/customer_portal/docs/models/shared/product.md
@@ -0,0 +1,17 @@
+# Product
+
+The product entity
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- |
+| `additional_properties` | Dict[str, *Any*] | :heavy_minus_sign: | N/A | |
+| `created_at` | [date](https://docs.python.org/3/library/datetime.html#date-objects) | :heavy_check_mark: | Creation timestamp of the entity | 2021-02-09T12:41:43.662Z |
+| `id` | *str* | :heavy_check_mark: | Entity ID | 5da0a718-c822-403d-9f5d-20d4584e0528 |
+| `org` | *str* | :heavy_check_mark: | Organization ID the entity belongs to | 123 |
+| `schema` | [ProductSchema](../../models/shared/productschema.md) | :heavy_check_mark: | N/A | |
+| `tags` | List[*str*] | :heavy_minus_sign: | Array of entity tags | example,mock |
+| `title` | *str* | :heavy_check_mark: | Title of the entity | Example Entity |
+| `updated_at` | [date](https://docs.python.org/3/library/datetime.html#date-objects) | :heavy_check_mark: | Last update timestamp of the entity | 2021-02-09T12:41:43.662Z |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/productschema.md b/customer_portal/docs/models/shared/productschema.md
new file mode 100755
index 000000000..25998fba2
--- /dev/null
+++ b/customer_portal/docs/models/shared/productschema.md
@@ -0,0 +1,8 @@
+# ProductSchema
+
+
+## Values
+
+| Name | Value |
+| --------- | --------- |
+| `PRODUCT` | product |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/saveentityfile.md b/customer_portal/docs/models/shared/saveentityfile.md
new file mode 100755
index 000000000..b10398da5
--- /dev/null
+++ b/customer_portal/docs/models/shared/saveentityfile.md
@@ -0,0 +1,10 @@
+# SaveEntityFile
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------------------------------------------------------------- |
+| `entity_id` | *str* | :heavy_check_mark: | Entity ID | 123456 |
+| `entity_type` | *str* | :heavy_check_mark: | Entity type | order |
+| `files` | List[[SaveEntityFileFiles](../../models/shared/saveentityfilefiles.md)] | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/saveentityfilefiles.md b/customer_portal/docs/models/shared/saveentityfilefiles.md
new file mode 100755
index 000000000..bae2866ac
--- /dev/null
+++ b/customer_portal/docs/models/shared/saveentityfilefiles.md
@@ -0,0 +1,13 @@
+# SaveEntityFileFiles
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ----------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- |
+| `tags` | List[*str*] | :heavy_minus_sign: | Array of file tags | 12345 |
+| `access_control` | [Optional[SaveEntityFileFilesAccessControl]](../../models/shared/saveentityfilefilesaccesscontrol.md) | :heavy_minus_sign: | Access control level for the file | |
+| `document_type` | *Optional[str]* | :heavy_minus_sign: | Document type | 12345 |
+| `file_entity_id` | *Optional[str]* | :heavy_minus_sign: | File entity ID | 12345 |
+| `filename` | *str* | :heavy_check_mark: | File name | 12345 |
+| `s3ref` | [SaveEntityFileFilesS3ref](../../models/shared/saveentityfilefiless3ref.md) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/saveentityfilefilesaccesscontrol.md b/customer_portal/docs/models/shared/saveentityfilefilesaccesscontrol.md
new file mode 100755
index 000000000..98bdc529b
--- /dev/null
+++ b/customer_portal/docs/models/shared/saveentityfilefilesaccesscontrol.md
@@ -0,0 +1,11 @@
+# SaveEntityFileFilesAccessControl
+
+Access control level for the file
+
+
+## Values
+
+| Name | Value |
+| ------------- | ------------- |
+| `PRIVATE` | private |
+| `PUBLIC_READ` | public-read |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/saveentityfilefiless3ref.md b/customer_portal/docs/models/shared/saveentityfilefiless3ref.md
new file mode 100755
index 000000000..3821d0c87
--- /dev/null
+++ b/customer_portal/docs/models/shared/saveentityfilefiless3ref.md
@@ -0,0 +1,9 @@
+# SaveEntityFileFilesS3ref
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `bucket` | *str* | :heavy_check_mark: | S3 bucket name | 12345 |
+| `key` | *str* | :heavy_check_mark: | S3 key | 12345 |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/saveportalfile.md b/customer_portal/docs/models/shared/saveportalfile.md
new file mode 100755
index 000000000..6a09ffc3a
--- /dev/null
+++ b/customer_portal/docs/models/shared/saveportalfile.md
@@ -0,0 +1,9 @@
+# SavePortalFile
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------------------------------------------------------------- |
+| `files` | List[[SavePortalFileFiles](../../models/shared/saveportalfilefiles.md)] | :heavy_check_mark: | N/A |
+| `origin` | [Origin](../../models/shared/origin.md) | :heavy_check_mark: | Origin of the portal |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/saveportalfilefiles.md b/customer_portal/docs/models/shared/saveportalfilefiles.md
new file mode 100755
index 000000000..45dab5724
--- /dev/null
+++ b/customer_portal/docs/models/shared/saveportalfilefiles.md
@@ -0,0 +1,11 @@
+# SavePortalFileFiles
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
+| `tags` | List[*str*] | :heavy_minus_sign: | Array of file tags | 12345 |
+| `file_type` | *str* | :heavy_check_mark: | File type | orderRightTeaser |
+| `filename` | *Optional[str]* | :heavy_minus_sign: | File name | 12345 |
+| `s3ref` | [Optional[SavePortalFileFilesS3ref]](../../models/shared/saveportalfilefiless3ref.md) | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/saveportalfilefiless3ref.md b/customer_portal/docs/models/shared/saveportalfilefiless3ref.md
new file mode 100755
index 000000000..4242b36fb
--- /dev/null
+++ b/customer_portal/docs/models/shared/saveportalfilefiless3ref.md
@@ -0,0 +1,9 @@
+# SavePortalFileFilesS3ref
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `bucket` | *str* | :heavy_check_mark: | S3 bucket name | 12345 |
+| `key` | *str* | :heavy_check_mark: | S3 key | 12345 |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/schema.md b/customer_portal/docs/models/shared/schema.md
new file mode 100755
index 000000000..c828ba000
--- /dev/null
+++ b/customer_portal/docs/models/shared/schema.md
@@ -0,0 +1,9 @@
+# Schema
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ----------------------- | ----------------------- | ----------------------- | ----------------------- | ----------------------- |
+| `additional_properties` | Dict[str, *Any*] | :heavy_minus_sign: | N/A | |
+| `slug` | *Optional[str]* | :heavy_minus_sign: | Slug of the schema | contact |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/security.md b/customer_portal/docs/models/shared/security.md
new file mode 100755
index 000000000..bc97a3764
--- /dev/null
+++ b/customer_portal/docs/models/shared/security.md
@@ -0,0 +1,9 @@
+# Security
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `epilot_auth` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `portal_auth` | *Optional[str]* | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/teaserwidget.md b/customer_portal/docs/models/shared/teaserwidget.md
new file mode 100755
index 000000000..c21994340
--- /dev/null
+++ b/customer_portal/docs/models/shared/teaserwidget.md
@@ -0,0 +1,14 @@
+# TeaserWidget
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- |
+| `button` | [Optional[TeaserWidgetButton]](../../models/shared/teaserwidgetbutton.md) | :heavy_minus_sign: | N/A |
+| `headline` | [Optional[TeaserWidgetHeadline]](../../models/shared/teaserwidgetheadline.md) | :heavy_minus_sign: | N/A |
+| `id` | *str* | :heavy_check_mark: | N/A |
+| `image_url` | *Optional[str]* | :heavy_minus_sign: | N/A |
+| `list_index` | *int* | :heavy_check_mark: | Index of the widget in the list, used for ordering (left or right) |
+| `sub_headline` | [Optional[TeaserWidgetSubHeadline]](../../models/shared/teaserwidgetsubheadline.md) | :heavy_minus_sign: | N/A |
+| `type` | [TeaserWidgetType](../../models/shared/teaserwidgettype.md) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/teaserwidgetbutton.md b/customer_portal/docs/models/shared/teaserwidgetbutton.md
new file mode 100755
index 000000000..812ee6848
--- /dev/null
+++ b/customer_portal/docs/models/shared/teaserwidgetbutton.md
@@ -0,0 +1,9 @@
+# TeaserWidgetButton
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- |
+| `label` | [Optional[TeaserWidgetButtonLabel]](../../models/shared/teaserwidgetbuttonlabel.md) | :heavy_minus_sign: | N/A |
+| `url` | *Optional[str]* | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/teaserwidgetbuttonlabel.md b/customer_portal/docs/models/shared/teaserwidgetbuttonlabel.md
new file mode 100755
index 000000000..5678df26a
--- /dev/null
+++ b/customer_portal/docs/models/shared/teaserwidgetbuttonlabel.md
@@ -0,0 +1,9 @@
+# TeaserWidgetButtonLabel
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------ | ------------------ | ------------------ | ------------------ |
+| `de` | *Optional[str]* | :heavy_minus_sign: | N/A |
+| `en` | *Optional[str]* | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/teaserwidgetheadline.md b/customer_portal/docs/models/shared/teaserwidgetheadline.md
new file mode 100755
index 000000000..8ae099549
--- /dev/null
+++ b/customer_portal/docs/models/shared/teaserwidgetheadline.md
@@ -0,0 +1,9 @@
+# TeaserWidgetHeadline
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------ | ------------------ | ------------------ | ------------------ |
+| `de` | *Optional[str]* | :heavy_minus_sign: | N/A |
+| `en` | *Optional[str]* | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/teaserwidgetsubheadline.md b/customer_portal/docs/models/shared/teaserwidgetsubheadline.md
new file mode 100755
index 000000000..d773bd3bb
--- /dev/null
+++ b/customer_portal/docs/models/shared/teaserwidgetsubheadline.md
@@ -0,0 +1,9 @@
+# TeaserWidgetSubHeadline
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------ | ------------------ | ------------------ | ------------------ |
+| `de` | *Optional[str]* | :heavy_minus_sign: | N/A |
+| `en` | *Optional[str]* | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/teaserwidgettype.md b/customer_portal/docs/models/shared/teaserwidgettype.md
new file mode 100755
index 000000000..cd89256e8
--- /dev/null
+++ b/customer_portal/docs/models/shared/teaserwidgettype.md
@@ -0,0 +1,12 @@
+# TeaserWidgetType
+
+
+## Values
+
+| Name | Value |
+| ----------------- | ----------------- |
+| `ACTION_WIDGET` | ACTION_WIDGET |
+| `CONTENT_WIDGET` | CONTENT_WIDGET |
+| `ENTITY_WIDGET` | ENTITY_WIDGET |
+| `TEASER_WIDGET` | TEASER_WIDGET |
+| `DOCUMENT_WIDGET` | DOCUMENT_WIDGET |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/upsertportalconfig.md b/customer_portal/docs/models/shared/upsertportalconfig.md
new file mode 100755
index 000000000..fc4430052
--- /dev/null
+++ b/customer_portal/docs/models/shared/upsertportalconfig.md
@@ -0,0 +1,26 @@
+# UpsertPortalConfig
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `cognito_details` | [Optional[UpsertPortalConfigCognitoDetails]](../../models/shared/upsertportalconfigcognitodetails.md) | :heavy_minus_sign: | AWS Cognito Pool details for the portal | |
+| `config` | *Optional[str]* | :heavy_minus_sign: | Stringified object with configuration details | |
+| `contact_identifiers` | List[*str*] | :heavy_minus_sign: | Identifiers to identify a contact. | email,last_name |
+| ~~`contact_secondary_identifier`~~ | *Optional[str]* | :heavy_minus_sign: | : warning: ** DEPRECATED **: This will be removed in a future release, please migrate away from it as soon as possible.
Secondary identifier to identify a contact other than the email | full_name |
+| `default_user_to_notify` | [Optional[UpsertPortalConfigDefaultUserToNotify]](../../models/shared/upsertportalconfigdefaultusertonotify.md) | :heavy_minus_sign: | Default 360 user to notify upon an internal notification | |
+| `design_id` | *str* | :heavy_check_mark: | ID of the design used to build the portal | 9ba94f20-b872-4217-a259-2a90a8ee1a29 |
+| `domain` | *Optional[str]* | :heavy_minus_sign: | The URL on which the portal is accessible | abc.com |
+| `email_templates` | [Optional[EmailTemplates]](../../models/shared/emailtemplates.md) | :heavy_minus_sign: | Email templates used for authentication and internal processes | |
+| `enabled` | *Optional[bool]* | :heavy_minus_sign: | Enable/Disable the portal access | |
+| `entity_actions` | List[[UpsertPortalConfigEntityActions](../../models/shared/upsertportalconfigentityactions.md)] | :heavy_minus_sign: | Journey actions allowed on an entity by a portal user | |
+| `entity_edit_rules` | List[[UpsertPortalConfigEntityEditRules](../../models/shared/upsertportalconfigentityeditrules.md)] | :heavy_minus_sign: | Rules for editing an entity by a portal user | |
+| `entity_identifiers` | [Optional[UpsertPortalConfigEntityIdentifiers]](../../models/shared/upsertportalconfigentityidentifiers.md) | :heavy_minus_sign: | Identifiers used to identify an entity by a portal user | |
+| `feature_settings` | [Optional[UpsertPortalConfigFeatureSettings]](../../models/shared/upsertportalconfigfeaturesettings.md) | :heavy_minus_sign: | Feature settings for the portal | |
+| `grants` | List[[Grant](../../models/shared/grant.md)] | :heavy_minus_sign: | Permissions granted to a portal user while accessing entities | |
+| `images` | [Optional[UpsertPortalConfigImages]](../../models/shared/upsertportalconfigimages.md) | :heavy_minus_sign: | Teaser & Banner Image web links | |
+| `is_epilot_domain` | *Optional[bool]* | :heavy_minus_sign: | Mark true if the domain is an Epilot domain | |
+| `name` | *Optional[str]* | :heavy_minus_sign: | A short name to identify your portal | Installer Portal |
+| ~~`self_registration`~~ | *Optional[bool]* | :heavy_minus_sign: | : warning: ** DEPRECATED **: This will be removed in a future release, please migrate away from it as soon as possible.
Allow portal user self-registration without a mapped contact | false |
+| `self_registration_setting` | [Optional[UpsertPortalConfigSelfRegistrationSetting]](../../models/shared/upsertportalconfigselfregistrationsetting.md) | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/upsertportalconfigcognitodetails.md b/customer_portal/docs/models/shared/upsertportalconfigcognitodetails.md
new file mode 100755
index 000000000..4624cbdb2
--- /dev/null
+++ b/customer_portal/docs/models/shared/upsertportalconfigcognitodetails.md
@@ -0,0 +1,12 @@
+# UpsertPortalConfigCognitoDetails
+
+AWS Cognito Pool details for the portal
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------------------------------------------------------------- |
+| `cognito_user_pool_arn` | *Optional[str]* | :heavy_minus_sign: | Cognito user pool ARN | arn:aws:cognito-idp:us-east-1:123412341234:userpool/us-east-1_123412341 |
+| `cognito_user_pool_client_id` | *Optional[str]* | :heavy_minus_sign: | Cognito user pool client ID | 6bsd0jkgoie74k2i8mrhc1vest |
+| `cognito_user_pool_id` | *Optional[str]* | :heavy_minus_sign: | Cognito user pool ID | eu-central-1_CUEQRNbUb |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/upsertportalconfigdefaultusertonotify.md b/customer_portal/docs/models/shared/upsertportalconfigdefaultusertonotify.md
new file mode 100755
index 000000000..45f05767e
--- /dev/null
+++ b/customer_portal/docs/models/shared/upsertportalconfigdefaultusertonotify.md
@@ -0,0 +1,10 @@
+# UpsertPortalConfigDefaultUserToNotify
+
+Default 360 user to notify upon an internal notification
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------------------------------------------------------- | ----------------------------------------------------------- | ----------------------------------------------------------- | ----------------------------------------------------------- |
+| `on_pending_user` | List[[AdminUser](../../models/shared/adminuser.md)] | :heavy_minus_sign: | Default admin users for pending user notification to notify |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/upsertportalconfigentityactions.md b/customer_portal/docs/models/shared/upsertportalconfigentityactions.md
new file mode 100755
index 000000000..9fdfb1a7c
--- /dev/null
+++ b/customer_portal/docs/models/shared/upsertportalconfigentityactions.md
@@ -0,0 +1,10 @@
+# UpsertPortalConfigEntityActions
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
+| `action_label` | [Optional[UpsertPortalConfigEntityActionsActionLabel]](../../models/shared/upsertportalconfigentityactionsactionlabel.md) | :heavy_minus_sign: | N/A | |
+| `journey_id` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `slug` | [Optional[EntitySlug]](../../models/shared/entityslug.md) | :heavy_minus_sign: | URL-friendly identifier for the entity schema | contact |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/upsertportalconfigentityactionsactionlabel.md b/customer_portal/docs/models/shared/upsertportalconfigentityactionsactionlabel.md
new file mode 100755
index 000000000..3d0e6eeb7
--- /dev/null
+++ b/customer_portal/docs/models/shared/upsertportalconfigentityactionsactionlabel.md
@@ -0,0 +1,9 @@
+# UpsertPortalConfigEntityActionsActionLabel
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------ | ------------------ | ------------------ | ------------------ |
+| `de` | *Optional[str]* | :heavy_minus_sign: | N/A |
+| `en` | *Optional[str]* | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/upsertportalconfigentityeditrules.md b/customer_portal/docs/models/shared/upsertportalconfigentityeditrules.md
new file mode 100755
index 000000000..9fc774825
--- /dev/null
+++ b/customer_portal/docs/models/shared/upsertportalconfigentityeditrules.md
@@ -0,0 +1,17 @@
+# UpsertPortalConfigEntityEditRules
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ----------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- |
+| `allowed_decrement` | *Optional[str]* | :heavy_minus_sign: | N/A | 10% |
+| `allowed_increment` | *Optional[str]* | :heavy_minus_sign: | N/A | 10% |
+| `attribute` | *Optional[str]* | :heavy_minus_sign: | N/A | first_name |
+| `cadence_period` | *Optional[float]* | :heavy_minus_sign: | N/A | 1 |
+| `cadence_period_type` | [Optional[UpsertPortalConfigEntityEditRulesCadencePeriodType]](../../models/shared/upsertportalconfigentityeditrulescadenceperiodtype.md) | :heavy_minus_sign: | N/A | |
+| `changes_allowed` | *Optional[int]* | :heavy_minus_sign: | N/A | 1 |
+| `grace_period` | *Optional[int]* | :heavy_minus_sign: | N/A | 1 |
+| `number_of_days_before_restriction` | *Optional[int]* | :heavy_minus_sign: | N/A | 10 |
+| `rule_type` | [Optional[UpsertPortalConfigEntityEditRulesRuleType]](../../models/shared/upsertportalconfigentityeditrulesruletype.md) | :heavy_minus_sign: | N/A | |
+| `slug` | [Optional[EntitySlug]](../../models/shared/entityslug.md) | :heavy_minus_sign: | URL-friendly identifier for the entity schema | contact |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/upsertportalconfigentityeditrulescadenceperiodtype.md b/customer_portal/docs/models/shared/upsertportalconfigentityeditrulescadenceperiodtype.md
new file mode 100755
index 000000000..1dd45955f
--- /dev/null
+++ b/customer_portal/docs/models/shared/upsertportalconfigentityeditrulescadenceperiodtype.md
@@ -0,0 +1,10 @@
+# UpsertPortalConfigEntityEditRulesCadencePeriodType
+
+
+## Values
+
+| Name | Value |
+| -------- | -------- |
+| `DAYS` | days |
+| `WEEKS` | weeks |
+| `MONTHS` | months |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/upsertportalconfigentityeditrulesruletype.md b/customer_portal/docs/models/shared/upsertportalconfigentityeditrulesruletype.md
new file mode 100755
index 000000000..cd4ff746c
--- /dev/null
+++ b/customer_portal/docs/models/shared/upsertportalconfigentityeditrulesruletype.md
@@ -0,0 +1,11 @@
+# UpsertPortalConfigEntityEditRulesRuleType
+
+
+## Values
+
+| Name | Value |
+| --------------------------- | --------------------------- |
+| `CADENCE` | cadence |
+| `RELATIVE_TO_CURRENT_VALUE` | relative_to_current_value |
+| `DAYS_BEFORE_DATE` | days_before_date |
+| `OVERDUE_PAYMENTS` | overdue_payments |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/upsertportalconfigentityidentifiers.md b/customer_portal/docs/models/shared/upsertportalconfigentityidentifiers.md
new file mode 100755
index 000000000..ae04544f4
--- /dev/null
+++ b/customer_portal/docs/models/shared/upsertportalconfigentityidentifiers.md
@@ -0,0 +1,10 @@
+# UpsertPortalConfigEntityIdentifiers
+
+Identifiers used to identify an entity by a portal user
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- |
+| `type` | [Optional[UpsertPortalConfigEntityIdentifiersType]](../../models/shared/upsertportalconfigentityidentifierstype.md) | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/upsertportalconfigentityidentifierstype.md b/customer_portal/docs/models/shared/upsertportalconfigentityidentifierstype.md
new file mode 100755
index 000000000..b23255e71
--- /dev/null
+++ b/customer_portal/docs/models/shared/upsertportalconfigentityidentifierstype.md
@@ -0,0 +1,9 @@
+# UpsertPortalConfigEntityIdentifiersType
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------- | ------------------------------------- | ------------------------------------- | ------------------------------------- | ------------------------------------- |
+| `attributes` | List[*str*] | :heavy_minus_sign: | Attributes used to identify an entity | contract_number |
+| `is_enabled` | *Optional[bool]* | :heavy_minus_sign: | Enable/Disable the entity identifier | |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/upsertportalconfigfeaturesettings.md b/customer_portal/docs/models/shared/upsertportalconfigfeaturesettings.md
new file mode 100755
index 000000000..24dd8171b
--- /dev/null
+++ b/customer_portal/docs/models/shared/upsertportalconfigfeaturesettings.md
@@ -0,0 +1,11 @@
+# UpsertPortalConfigFeatureSettings
+
+Feature settings for the portal
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------------------- | ----------------------- | ----------------------- | ----------------------- |
+| `billing` | *Optional[bool]* | :heavy_minus_sign: | Billing feature flag |
+| `start_page` | *Optional[bool]* | :heavy_minus_sign: | Start page feature flag |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/upsertportalconfigimages.md b/customer_portal/docs/models/shared/upsertportalconfigimages.md
new file mode 100755
index 000000000..122f196dc
--- /dev/null
+++ b/customer_portal/docs/models/shared/upsertportalconfigimages.md
@@ -0,0 +1,12 @@
+# UpsertPortalConfigImages
+
+Teaser & Banner Image web links
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
+| `order_left_teaser` | *Optional[str]* | :heavy_minus_sign: | URL of the order left teaser image | https://epilot-bucket.s3.eu-central-1.amazonaws.com/12344/6538fddb-f0e9-4f0f-af51-6e57891ff20a/order-left-teaser.jpeg |
+| `order_right_teaser` | *Optional[str]* | :heavy_minus_sign: | URL of the order right teaser image | https://epilot-bucket.s3.eu-central-1.amazonaws.com/12344/6538fddb-f0e9-4f0f-af51-6e57891ff20a/order-right-teaser.jpeg |
+| `welcome_banner` | *Optional[str]* | :heavy_minus_sign: | URL of the welcome banner image | https://epilot-bucket.s3.eu-central-1.amazonaws.com/12344/6538fddb-f0e9-4f0f-af51-6e57891ff20a/welcome-banner.jpeg |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/upsertportalconfigselfregistrationsetting.md b/customer_portal/docs/models/shared/upsertportalconfigselfregistrationsetting.md
new file mode 100755
index 000000000..fa5e8d276
--- /dev/null
+++ b/customer_portal/docs/models/shared/upsertportalconfigselfregistrationsetting.md
@@ -0,0 +1,10 @@
+# UpsertPortalConfigSelfRegistrationSetting
+
+
+## Values
+
+| Name | Value |
+| -------------------------------- | -------------------------------- |
+| `ALLOW_WITH_CONTACT_CREATION` | ALLOW_WITH_CONTACT_CREATION |
+| `ALLOW_WITHOUT_CONTACT_CREATION` | ALLOW_WITHOUT_CONTACT_CREATION |
+| `DENY` | DENY |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/upsertportalwidget.md b/customer_portal/docs/models/shared/upsertportalwidget.md
new file mode 100755
index 000000000..a75b044a0
--- /dev/null
+++ b/customer_portal/docs/models/shared/upsertportalwidget.md
@@ -0,0 +1,8 @@
+# UpsertPortalWidget
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- |
+| `widgets` | List[[Union[EntityWidget, ContentWidget, ActionWidget, TeaserWidget, WidgetBase]](../../models/shared/portalwidget.md)] | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/widgetaction.md b/customer_portal/docs/models/shared/widgetaction.md
new file mode 100755
index 000000000..a0d409604
--- /dev/null
+++ b/customer_portal/docs/models/shared/widgetaction.md
@@ -0,0 +1,12 @@
+# WidgetAction
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- |
+| `id` | *str* | :heavy_check_mark: | N/A |
+| `label` | [WidgetActionLabel](../../models/shared/widgetactionlabel.md) | :heavy_check_mark: | N/A |
+| `rules` | List[[WidgetActionRules](../../models/shared/widgetactionrules.md)] | :heavy_minus_sign: | N/A |
+| `type` | [WidgetActionType](../../models/shared/widgetactiontype.md) | :heavy_check_mark: | N/A |
+| `url` | *str* | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/widgetactionlabel.md b/customer_portal/docs/models/shared/widgetactionlabel.md
new file mode 100755
index 000000000..2257099f7
--- /dev/null
+++ b/customer_portal/docs/models/shared/widgetactionlabel.md
@@ -0,0 +1,9 @@
+# WidgetActionLabel
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------ | ------------------ | ------------------ | ------------------ |
+| `de` | *Optional[str]* | :heavy_minus_sign: | N/A |
+| `en` | *Optional[str]* | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/widgetactionrules.md b/customer_portal/docs/models/shared/widgetactionrules.md
new file mode 100755
index 000000000..28eb7bb29
--- /dev/null
+++ b/customer_portal/docs/models/shared/widgetactionrules.md
@@ -0,0 +1,10 @@
+# WidgetActionRules
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------ | ------------------ | ------------------ | ------------------ |
+| `attribute` | *str* | :heavy_check_mark: | N/A |
+| `attribute_value` | *str* | :heavy_check_mark: | N/A |
+| `entity` | *str* | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/widgetactiontype.md b/customer_portal/docs/models/shared/widgetactiontype.md
new file mode 100755
index 000000000..5439d7e21
--- /dev/null
+++ b/customer_portal/docs/models/shared/widgetactiontype.md
@@ -0,0 +1,9 @@
+# WidgetActionType
+
+
+## Values
+
+| Name | Value |
+| --------- | --------- |
+| `LINK` | link |
+| `JOURNEY` | journey |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/widgetbase.md b/customer_portal/docs/models/shared/widgetbase.md
new file mode 100755
index 000000000..61f9e5019
--- /dev/null
+++ b/customer_portal/docs/models/shared/widgetbase.md
@@ -0,0 +1,12 @@
+# WidgetBase
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- |
+| `headline` | [Optional[WidgetBaseHeadline]](../../models/shared/widgetbaseheadline.md) | :heavy_minus_sign: | N/A |
+| `id` | *str* | :heavy_check_mark: | N/A |
+| `list_index` | *int* | :heavy_check_mark: | Index of the widget in the list, used for ordering (left or right) |
+| `sub_headline` | [Optional[WidgetBaseSubHeadline]](../../models/shared/widgetbasesubheadline.md) | :heavy_minus_sign: | N/A |
+| `type` | [WidgetBaseType](../../models/shared/widgetbasetype.md) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/widgetbaseheadline.md b/customer_portal/docs/models/shared/widgetbaseheadline.md
new file mode 100755
index 000000000..ba429b1df
--- /dev/null
+++ b/customer_portal/docs/models/shared/widgetbaseheadline.md
@@ -0,0 +1,9 @@
+# WidgetBaseHeadline
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------ | ------------------ | ------------------ | ------------------ |
+| `de` | *Optional[str]* | :heavy_minus_sign: | N/A |
+| `en` | *Optional[str]* | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/widgetbasesubheadline.md b/customer_portal/docs/models/shared/widgetbasesubheadline.md
new file mode 100755
index 000000000..ce6d1e362
--- /dev/null
+++ b/customer_portal/docs/models/shared/widgetbasesubheadline.md
@@ -0,0 +1,9 @@
+# WidgetBaseSubHeadline
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------ | ------------------ | ------------------ | ------------------ |
+| `de` | *Optional[str]* | :heavy_minus_sign: | N/A |
+| `en` | *Optional[str]* | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/customer_portal/docs/models/shared/widgetbasetype.md b/customer_portal/docs/models/shared/widgetbasetype.md
new file mode 100755
index 000000000..35abe489a
--- /dev/null
+++ b/customer_portal/docs/models/shared/widgetbasetype.md
@@ -0,0 +1,12 @@
+# WidgetBaseType
+
+
+## Values
+
+| Name | Value |
+| ----------------- | ----------------- |
+| `ACTION_WIDGET` | ACTION_WIDGET |
+| `CONTENT_WIDGET` | CONTENT_WIDGET |
+| `ENTITY_WIDGET` | ENTITY_WIDGET |
+| `TEASER_WIDGET` | TEASER_WIDGET |
+| `DOCUMENT_WIDGET` | DOCUMENT_WIDGET |
\ No newline at end of file
diff --git a/customer_portal/docs/sdks/activity/README.md b/customer_portal/docs/sdks/activity/README.md
new file mode 100755
index 000000000..27351ddf2
--- /dev/null
+++ b/customer_portal/docs/sdks/activity/README.md
@@ -0,0 +1,49 @@
+# Activity
+(*activity*)
+
+### Available Operations
+
+* [get_entity_activity_feed](#get_entity_activity_feed) - getEntityActivityFeed
+
+## get_entity_activity_feed
+
+Get activity feed for an entity
+
+
+### Example Usage
+
+```python
+import epilot
+import dateutil.parser
+from epilot.models import operations, shared
+
+s = epilot.Epilot(
+ security=shared.Security(
+ epilot_auth="",
+ ),
+)
+
+req = operations.GetEntityActivityFeedRequest(
+ id='5da0a718-c822-403d-9f5d-20d4584e0528',
+ slug=shared.EntitySlug.CONTACT,
+ type='SyncActivity',
+)
+
+res = s.activity.get_entity_activity_feed(req)
+
+if res.get_entity_activity_feed_200_application_json_object is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- |
+| `request` | [operations.GetEntityActivityFeedRequest](../../models/operations/getentityactivityfeedrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+
+
+### Response
+
+**[operations.GetEntityActivityFeedResponse](../../models/operations/getentityactivityfeedresponse.md)**
+
diff --git a/customer_portal/docs/sdks/balance/README.md b/customer_portal/docs/sdks/balance/README.md
new file mode 100755
index 000000000..09e4246bb
--- /dev/null
+++ b/customer_portal/docs/sdks/balance/README.md
@@ -0,0 +1,44 @@
+# Balance
+(*balance*)
+
+### Available Operations
+
+* [get_customer_balance](#get_customer_balance) - getCustomerBalance
+
+## get_customer_balance
+
+Get total balance across all contracts and orders of a customer entity.
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations
+
+s = epilot.Epilot()
+
+req = operations.GetCustomerBalanceRequest(
+ customer_entity_id='1e3f0d58-69d2-4dbb-9a43-3ee63d862e8e',
+)
+
+res = s.balance.get_customer_balance(req, operations.GetCustomerBalanceSecurity(
+ epilot_auth="",
+))
+
+if res.balance is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- |
+| `request` | [operations.GetCustomerBalanceRequest](../../models/operations/getcustomerbalancerequest.md) | :heavy_check_mark: | The request object to use for the request. |
+| `security` | [operations.GetCustomerBalanceSecurity](../../models/operations/getcustomerbalancesecurity.md) | :heavy_check_mark: | The security requirements to use for the request. |
+
+
+### Response
+
+**[operations.GetCustomerBalanceResponse](../../models/operations/getcustomerbalanceresponse.md)**
+
diff --git a/customer_portal/docs/sdks/ecp/README.md b/customer_portal/docs/sdks/ecp/README.md
new file mode 100755
index 000000000..26fdaef1d
--- /dev/null
+++ b/customer_portal/docs/sdks/ecp/README.md
@@ -0,0 +1,1170 @@
+# Ecp
+(*ecp*)
+
+## Overview
+
+APIs defined for a portal user
+
+### Available Operations
+
+* [add_end_customer_relation_to_entity](#add_end_customer_relation_to_entity) - addEndCustomerRelationToEntity
+* [create_custom_entity_activity](#create_custom_entity_activity) - createCustomEntityActivity
+* [delete_entity_file](#delete_entity_file) - deleteEntityFile
+* [delete_portal_user](#delete_portal_user) - deletePortalUser
+* [get_all_contracts](#get_all_contracts) - getAllContracts
+* [get_all_files](#get_all_files) - getAllFiles
+* [get_all_opportunities](#get_all_opportunities) - getAllOpportunities
+* [get_all_orders](#get_all_orders) - getAllOrders
+* [get_billing_events](#get_billing_events) - getBillingEvents
+* [get_contact](#get_contact) - getContact
+* [get_contract](#get_contract) - getContract
+* [get_entities_by_identifiers](#get_entities_by_identifiers) - getEntitiesByIdentifiers
+* [get_file_by_id](#get_file_by_id) - getFileById
+* [get_files_count_by_entity](#get_files_count_by_entity) - getFileCountByEntity
+* [get_opportunity](#get_opportunity) - getOpportunity
+* [get_order](#get_order) - getOrder
+* [get_organization_settings](#get_organization_settings) - getOrganizationSettings
+* [get_portal_config](#get_portal_config) - getPortalConfig
+* [get_portal_user](#get_portal_user) - getPortalUser
+* [get_portal_widgets](#get_portal_widgets) - getPortalWidgets
+* [get_schemas](#get_schemas) - getSchemas
+* [save_entity_file](#save_entity_file) - saveEntityFile
+* [track_file_downloaded](#track_file_downloaded) - trackFileDownloaded
+* [trigger_entity_access](#trigger_entity_access) - triggerEntityAccess
+* [update_contact](#update_contact) - updateContact
+* [update_contract](#update_contract) - updateContract
+* [update_opportunity](#update_opportunity) - updateOpportunity
+* [update_order](#update_order) - updateOrder
+* [update_portal_user](#update_portal_user) - updatePortalUser
+
+## add_end_customer_relation_to_entity
+
+Add portal user relation to an entity
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations, shared
+
+s = epilot.Epilot()
+
+req = operations.AddEndCustomerRelationToEntityRequest(
+ id='5da0a718-c822-403d-9f5d-20d4584e0528',
+ slug=shared.EntitySlug.CONTACT,
+)
+
+res = s.ecp.add_end_customer_relation_to_entity(req, operations.AddEndCustomerRelationToEntitySecurity(
+ portal_auth="",
+))
+
+if res.add_end_customer_relation_to_entity_200_application_json_object is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
+| `request` | [operations.AddEndCustomerRelationToEntityRequest](../../models/operations/addendcustomerrelationtoentityrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+| `security` | [operations.AddEndCustomerRelationToEntitySecurity](../../models/operations/addendcustomerrelationtoentitysecurity.md) | :heavy_check_mark: | The security requirements to use for the request. |
+
+
+### Response
+
+**[operations.AddEndCustomerRelationToEntityResponse](../../models/operations/addendcustomerrelationtoentityresponse.md)**
+
+
+## create_custom_entity_activity
+
+Create a custom activity that can be displayed in activity feed of an entity.
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations, shared
+
+s = epilot.Epilot()
+
+req = operations.CreateCustomEntityActivityRequest(
+ activity=shared.Activity(
+ message='{{caller}} did something with {{entity payload.entity.id}}.',
+ payload={
+ "entity": 'string',
+ },
+ title='My custom activity',
+ type='MyCustomActivity',
+ ),
+ entities=[
+ '5da0a718-c822-403d-9f5d-20d4584e0528',
+ ],
+)
+
+res = s.ecp.create_custom_entity_activity(req, operations.CreateCustomEntityActivitySecurity(
+ portal_auth="",
+))
+
+if res.activity_item is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- |
+| `request` | [operations.CreateCustomEntityActivityRequest](../../models/operations/createcustomentityactivityrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+| `security` | [operations.CreateCustomEntityActivitySecurity](../../models/operations/createcustomentityactivitysecurity.md) | :heavy_check_mark: | The security requirements to use for the request. |
+
+
+### Response
+
+**[operations.CreateCustomEntityActivityResponse](../../models/operations/createcustomentityactivityresponse.md)**
+
+
+## delete_entity_file
+
+Delete files from an entity
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations, shared
+
+s = epilot.Epilot()
+
+req = shared.DeleteEntityFile(
+ entity_id='123456',
+ entity_type='order',
+ file_entity_ids=[
+ '12345',
+ ],
+)
+
+res = s.ecp.delete_entity_file(req, operations.DeleteEntityFileSecurity(
+ portal_auth="",
+))
+
+if res.delete_entity_file_202_application_json_object is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ |
+| `request` | [shared.DeleteEntityFile](../../models/shared/deleteentityfile.md) | :heavy_check_mark: | The request object to use for the request. |
+| `security` | [operations.DeleteEntityFileSecurity](../../models/operations/deleteentityfilesecurity.md) | :heavy_check_mark: | The security requirements to use for the request. |
+
+
+### Response
+
+**[operations.DeleteEntityFileResponse](../../models/operations/deleteentityfileresponse.md)**
+
+
+## delete_portal_user
+
+Delete the portal user
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations
+
+s = epilot.Epilot()
+
+
+res = s.ecp.delete_portal_user(operations.DeletePortalUserSecurity(
+ portal_auth="",
+))
+
+if res.delete_portal_user_200_application_json_object is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ |
+| `security` | [operations.DeletePortalUserSecurity](../../models/operations/deleteportalusersecurity.md) | :heavy_check_mark: | The security requirements to use for the request. |
+
+
+### Response
+
+**[operations.DeletePortalUserResponse](../../models/operations/deleteportaluserresponse.md)**
+
+
+## get_all_contracts
+
+Get all contracts for a portal user
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations
+
+s = epilot.Epilot()
+
+req = operations.GetAllContractsRequest(
+ from_=0,
+ size=100,
+)
+
+res = s.ecp.get_all_contracts(req, operations.GetAllContractsSecurity(
+ portal_auth="",
+))
+
+if res.get_all_contracts_200_application_json_object is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- |
+| `request` | [operations.GetAllContractsRequest](../../models/operations/getallcontractsrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+| `security` | [operations.GetAllContractsSecurity](../../models/operations/getallcontractssecurity.md) | :heavy_check_mark: | The security requirements to use for the request. |
+
+
+### Response
+
+**[operations.GetAllContractsResponse](../../models/operations/getallcontractsresponse.md)**
+
+
+## get_all_files
+
+Fetch all documents under the related entities of a contact
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations
+
+s = epilot.Epilot()
+
+req = operations.GetAllFilesRequest(
+ entity_ids=[
+ '4910096f-000a-4504-bf5a-d3774ec3032a',
+ '7c9f8536-6266-42e8-a0de-c60b61aa81a7',
+ ],
+ from_=0,
+ size=0,
+)
+
+res = s.ecp.get_all_files(req, operations.GetAllFilesSecurity(
+ portal_auth="",
+))
+
+if res.get_all_files_200_application_json_object is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- |
+| `request` | [operations.GetAllFilesRequest](../../models/operations/getallfilesrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+| `security` | [operations.GetAllFilesSecurity](../../models/operations/getallfilessecurity.md) | :heavy_check_mark: | The security requirements to use for the request. |
+
+
+### Response
+
+**[operations.GetAllFilesResponse](../../models/operations/getallfilesresponse.md)**
+
+
+## get_all_opportunities
+
+Get all opportunities of a portal user
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations
+
+s = epilot.Epilot()
+
+req = operations.GetAllOpportunitiesRequest(
+ from_=0,
+ size=100,
+)
+
+res = s.ecp.get_all_opportunities(req, operations.GetAllOpportunitiesSecurity(
+ portal_auth="",
+))
+
+if res.get_all_opportunities_200_application_json_object is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ |
+| `request` | [operations.GetAllOpportunitiesRequest](../../models/operations/getallopportunitiesrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+| `security` | [operations.GetAllOpportunitiesSecurity](../../models/operations/getallopportunitiessecurity.md) | :heavy_check_mark: | The security requirements to use for the request. |
+
+
+### Response
+
+**[operations.GetAllOpportunitiesResponse](../../models/operations/getallopportunitiesresponse.md)**
+
+
+## get_all_orders
+
+Get all orders for the portal user
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations
+
+s = epilot.Epilot()
+
+req = operations.GetAllOrdersRequest(
+ from_=0,
+ size=100,
+)
+
+res = s.ecp.get_all_orders(req, operations.GetAllOrdersSecurity(
+ portal_auth="",
+))
+
+if res.get_all_orders_200_application_json_object is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- |
+| `request` | [operations.GetAllOrdersRequest](../../models/operations/getallordersrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+| `security` | [operations.GetAllOrdersSecurity](../../models/operations/getallorderssecurity.md) | :heavy_check_mark: | The security requirements to use for the request. |
+
+
+### Response
+
+**[operations.GetAllOrdersResponse](../../models/operations/getallordersresponse.md)**
+
+
+## get_billing_events
+
+Fetch billing events for a portal user
+
+### Example Usage
+
+```python
+import epilot
+import dateutil.parser
+from epilot.models import operations
+
+s = epilot.Epilot()
+
+req = operations.GetBillingEventsRequest(
+ customer_id='string',
+ entity_id=[
+ 'string',
+ ],
+ event_type=[
+ operations.GetBillingEventsEventType.INSTALLMENT,
+ ],
+)
+
+res = s.ecp.get_billing_events(req, operations.GetBillingEventsSecurity(
+ portal_auth="",
+))
+
+if res.get_billing_events_200_application_json_object is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ |
+| `request` | [operations.GetBillingEventsRequest](../../models/operations/getbillingeventsrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+| `security` | [operations.GetBillingEventsSecurity](../../models/operations/getbillingeventssecurity.md) | :heavy_check_mark: | The security requirements to use for the request. |
+
+
+### Response
+
+**[operations.GetBillingEventsResponse](../../models/operations/getbillingeventsresponse.md)**
+
+
+## get_contact
+
+Retrieves the contact by ID.
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations
+
+s = epilot.Epilot()
+
+
+res = s.ecp.get_contact(operations.GetContactSecurity(
+ portal_auth="",
+))
+
+if res.get_contact_200_application_json_object is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ |
+| `security` | [operations.GetContactSecurity](../../models/operations/getcontactsecurity.md) | :heavy_check_mark: | The security requirements to use for the request. |
+
+
+### Response
+
+**[operations.GetContactResponse](../../models/operations/getcontactresponse.md)**
+
+
+## get_contract
+
+Get a contract by id
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations
+
+s = epilot.Epilot()
+
+req = operations.GetContractRequest(
+ id='5da0a718-c822-403d-9f5d-20d4584e0528',
+)
+
+res = s.ecp.get_contract(req, operations.GetContractSecurity(
+ portal_auth="",
+))
+
+if res.get_contract_200_application_json_object is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- |
+| `request` | [operations.GetContractRequest](../../models/operations/getcontractrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+| `security` | [operations.GetContractSecurity](../../models/operations/getcontractsecurity.md) | :heavy_check_mark: | The security requirements to use for the request. |
+
+
+### Response
+
+**[operations.GetContractResponse](../../models/operations/getcontractresponse.md)**
+
+
+## get_entities_by_identifiers
+
+Get entities by identifiers by portal user
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations, shared
+
+s = epilot.Epilot()
+
+req = operations.GetEntitiesByIdentifiersRequest(
+ request_body={
+ "key": 'string',
+ },
+ slug=shared.EntitySlug.CONTACT,
+)
+
+res = s.ecp.get_entities_by_identifiers(req, operations.GetEntitiesByIdentifiersSecurity(
+ portal_auth="",
+))
+
+if res.get_entities_by_identifiers_200_application_json_object is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- |
+| `request` | [operations.GetEntitiesByIdentifiersRequest](../../models/operations/getentitiesbyidentifiersrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+| `security` | [operations.GetEntitiesByIdentifiersSecurity](../../models/operations/getentitiesbyidentifierssecurity.md) | :heavy_check_mark: | The security requirements to use for the request. |
+
+
+### Response
+
+**[operations.GetEntitiesByIdentifiersResponse](../../models/operations/getentitiesbyidentifiersresponse.md)**
+
+
+## get_file_by_id
+
+Fetch a document with ID
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations
+
+s = epilot.Epilot()
+
+req = operations.GetFileByIDRequest(
+ id='5da0a718-c822-403d-9f5d-20d4584e0528',
+)
+
+res = s.ecp.get_file_by_id(req, operations.GetFileByIDSecurity(
+ portal_auth="",
+))
+
+if res.get_file_by_id_200_application_json_object is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- |
+| `request` | [operations.GetFileByIDRequest](../../models/operations/getfilebyidrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+| `security` | [operations.GetFileByIDSecurity](../../models/operations/getfilebyidsecurity.md) | :heavy_check_mark: | The security requirements to use for the request. |
+
+
+### Response
+
+**[operations.GetFileByIDResponse](../../models/operations/getfilebyidresponse.md)**
+
+
+## get_files_count_by_entity
+
+Fetch file counts for all ECP user related entities
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations
+
+s = epilot.Epilot()
+
+
+res = s.ecp.get_files_count_by_entity(operations.GetFilesCountByEntitySecurity(
+ portal_auth="",
+))
+
+if res.entity_file_counts is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- |
+| `security` | [operations.GetFilesCountByEntitySecurity](../../models/operations/getfilescountbyentitysecurity.md) | :heavy_check_mark: | The security requirements to use for the request. |
+
+
+### Response
+
+**[operations.GetFilesCountByEntityResponse](../../models/operations/getfilescountbyentityresponse.md)**
+
+
+## get_opportunity
+
+Get an opportunity by id
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations
+
+s = epilot.Epilot()
+
+req = operations.GetOpportunityRequest(
+ id='5da0a718-c822-403d-9f5d-20d4584e0528',
+)
+
+res = s.ecp.get_opportunity(req, operations.GetOpportunitySecurity(
+ portal_auth="",
+))
+
+if res.get_opportunity_200_application_json_object is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- |
+| `request` | [operations.GetOpportunityRequest](../../models/operations/getopportunityrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+| `security` | [operations.GetOpportunitySecurity](../../models/operations/getopportunitysecurity.md) | :heavy_check_mark: | The security requirements to use for the request. |
+
+
+### Response
+
+**[operations.GetOpportunityResponse](../../models/operations/getopportunityresponse.md)**
+
+
+## get_order
+
+Get an order by id
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations
+
+s = epilot.Epilot()
+
+req = operations.GetOrderRequest(
+ id='5da0a718-c822-403d-9f5d-20d4584e0528',
+)
+
+res = s.ecp.get_order(req, operations.GetOrderSecurity(
+ portal_auth="",
+))
+
+if res.get_order_200_application_json_object is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- |
+| `request` | [operations.GetOrderRequest](../../models/operations/getorderrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+| `security` | [operations.GetOrderSecurity](../../models/operations/getordersecurity.md) | :heavy_check_mark: | The security requirements to use for the request. |
+
+
+### Response
+
+**[operations.GetOrderResponse](../../models/operations/getorderresponse.md)**
+
+
+## get_organization_settings
+
+Retrieves the organization settings.
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations
+
+s = epilot.Epilot()
+
+
+res = s.ecp.get_organization_settings(operations.GetOrganizationSettingsSecurity(
+ portal_auth="",
+))
+
+if res.get_organization_settings_200_application_json_object is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- |
+| `security` | [operations.GetOrganizationSettingsSecurity](../../models/operations/getorganizationsettingssecurity.md) | :heavy_check_mark: | The security requirements to use for the request. |
+
+
+### Response
+
+**[operations.GetOrganizationSettingsResponse](../../models/operations/getorganizationsettingsresponse.md)**
+
+
+## get_portal_config
+
+Retrieves the portal configuration.
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations, shared
+
+s = epilot.Epilot()
+
+req = operations.GetPortalConfigRequest()
+
+res = s.ecp.get_portal_config(req, operations.GetPortalConfigSecurity(
+ epilot_auth="",
+))
+
+if res.portal_config is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- |
+| `request` | [operations.GetPortalConfigRequest](../../models/operations/getportalconfigrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+| `security` | [operations.GetPortalConfigSecurity](../../models/operations/getportalconfigsecurity.md) | :heavy_check_mark: | The security requirements to use for the request. |
+
+
+### Response
+
+**[operations.GetPortalConfigResponse](../../models/operations/getportalconfigresponse.md)**
+
+
+## get_portal_user
+
+Get the portal user details
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations
+
+s = epilot.Epilot()
+
+
+res = s.ecp.get_portal_user(operations.GetPortalUserSecurity(
+ portal_auth="",
+))
+
+if res.get_portal_user_200_application_json_object is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ |
+| `security` | [operations.GetPortalUserSecurity](../../models/operations/getportalusersecurity.md) | :heavy_check_mark: | The security requirements to use for the request. |
+
+
+### Response
+
+**[operations.GetPortalUserResponse](../../models/operations/getportaluserresponse.md)**
+
+
+## get_portal_widgets
+
+Retrieves the widgets of a portal
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations, shared
+
+s = epilot.Epilot()
+
+req = operations.GetPortalWidgetsRequest()
+
+res = s.ecp.get_portal_widgets(req, operations.GetPortalWidgetsSecurity(
+ epilot_auth="",
+))
+
+if res.upsert_portal_widget is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ |
+| `request` | [operations.GetPortalWidgetsRequest](../../models/operations/getportalwidgetsrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+| `security` | [operations.GetPortalWidgetsSecurity](../../models/operations/getportalwidgetssecurity.md) | :heavy_check_mark: | The security requirements to use for the request. |
+
+
+### Response
+
+**[operations.GetPortalWidgetsResponse](../../models/operations/getportalwidgetsresponse.md)**
+
+
+## get_schemas
+
+Retrieves the schemas.
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations
+
+s = epilot.Epilot()
+
+
+res = s.ecp.get_schemas(operations.GetSchemasSecurity(
+ portal_auth="",
+))
+
+if res.get_schemas_200_application_json_object is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ |
+| `security` | [operations.GetSchemasSecurity](../../models/operations/getschemassecurity.md) | :heavy_check_mark: | The security requirements to use for the request. |
+
+
+### Response
+
+**[operations.GetSchemasResponse](../../models/operations/getschemasresponse.md)**
+
+
+## save_entity_file
+
+Add files to an entity
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations, shared
+
+s = epilot.Epilot()
+
+req = shared.SaveEntityFile(
+ entity_id='123456',
+ entity_type='order',
+ files=[
+ shared.SaveEntityFileFiles(
+ tags=[
+ 'string',
+ ],
+ document_type='12345',
+ file_entity_id='12345',
+ filename='12345',
+ s3ref=shared.SaveEntityFileFilesS3ref(
+ bucket='12345',
+ key='12345',
+ ),
+ ),
+ ],
+)
+
+res = s.ecp.save_entity_file(req, operations.SaveEntityFileSecurity(
+ portal_auth="",
+))
+
+if res.save_entity_file_201_application_json_object is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- |
+| `request` | [shared.SaveEntityFile](../../models/shared/saveentityfile.md) | :heavy_check_mark: | The request object to use for the request. |
+| `security` | [operations.SaveEntityFileSecurity](../../models/operations/saveentityfilesecurity.md) | :heavy_check_mark: | The security requirements to use for the request. |
+
+
+### Response
+
+**[operations.SaveEntityFileResponse](../../models/operations/saveentityfileresponse.md)**
+
+
+## track_file_downloaded
+
+Track that user has downloaded a file
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations
+
+s = epilot.Epilot()
+
+req = operations.TrackFileDownloadedRequest(
+ id='5da0a718-c822-403d-9f5d-20d4584e0528',
+)
+
+res = s.ecp.track_file_downloaded(req, operations.TrackFileDownloadedSecurity(
+ portal_auth="",
+))
+
+if res.track_file_downloaded_200_application_json_object is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ |
+| `request` | [operations.TrackFileDownloadedRequest](../../models/operations/trackfiledownloadedrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+| `security` | [operations.TrackFileDownloadedSecurity](../../models/operations/trackfiledownloadedsecurity.md) | :heavy_check_mark: | The security requirements to use for the request. |
+
+
+### Response
+
+**[operations.TrackFileDownloadedResponse](../../models/operations/trackfiledownloadedresponse.md)**
+
+
+## trigger_entity_access
+
+Trigger entity access event for a portal user
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations
+
+s = epilot.Epilot()
+
+req = operations.TriggerEntityAccessRequest(
+ entity_id='1e3f0d58-69d2-4dbb-9a43-3ee63d862e8e',
+ schema='contract',
+)
+
+res = s.ecp.trigger_entity_access(req, operations.TriggerEntityAccessSecurity(
+ portal_auth="",
+))
+
+if res.trigger_entity_access_200_application_json_object is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ |
+| `request` | [operations.TriggerEntityAccessRequest](../../models/operations/triggerentityaccessrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+| `security` | [operations.TriggerEntityAccessSecurity](../../models/operations/triggerentityaccesssecurity.md) | :heavy_check_mark: | The security requirements to use for the request. |
+
+
+### Response
+
+**[operations.TriggerEntityAccessResponse](../../models/operations/triggerentityaccessresponse.md)**
+
+
+## update_contact
+
+Updates the contact details.
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations
+
+s = epilot.Epilot()
+
+req = {
+ "key": 'string',
+}
+
+res = s.ecp.update_contact(req, operations.UpdateContactSecurity(
+ portal_auth="",
+))
+
+if res.update_contact_200_application_json_object is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ |
+| `request` | [Dict[str, Any]](../../models//.md) | :heavy_check_mark: | The request object to use for the request. |
+| `security` | [operations.UpdateContactSecurity](../../models/operations/updatecontactsecurity.md) | :heavy_check_mark: | The security requirements to use for the request. |
+
+
+### Response
+
+**[operations.UpdateContactResponse](../../models/operations/updatecontactresponse.md)**
+
+
+## update_contract
+
+Update a contract by id
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations
+
+s = epilot.Epilot()
+
+req = operations.UpdateContractRequest(
+ request_body={
+ "key": 'string',
+ },
+ id='5da0a718-c822-403d-9f5d-20d4584e0528',
+)
+
+res = s.ecp.update_contract(req, operations.UpdateContractSecurity(
+ portal_auth="",
+))
+
+if res.update_contract_200_application_json_object is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- |
+| `request` | [operations.UpdateContractRequest](../../models/operations/updatecontractrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+| `security` | [operations.UpdateContractSecurity](../../models/operations/updatecontractsecurity.md) | :heavy_check_mark: | The security requirements to use for the request. |
+
+
+### Response
+
+**[operations.UpdateContractResponse](../../models/operations/updatecontractresponse.md)**
+
+
+## update_opportunity
+
+Update an opportunity by id
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations
+
+s = epilot.Epilot()
+
+req = operations.UpdateOpportunityRequest(
+ request_body={
+ "key": 'string',
+ },
+ id='5da0a718-c822-403d-9f5d-20d4584e0528',
+)
+
+res = s.ecp.update_opportunity(req, operations.UpdateOpportunitySecurity(
+ portal_auth="",
+))
+
+if res.update_opportunity_200_application_json_object is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- |
+| `request` | [operations.UpdateOpportunityRequest](../../models/operations/updateopportunityrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+| `security` | [operations.UpdateOpportunitySecurity](../../models/operations/updateopportunitysecurity.md) | :heavy_check_mark: | The security requirements to use for the request. |
+
+
+### Response
+
+**[operations.UpdateOpportunityResponse](../../models/operations/updateopportunityresponse.md)**
+
+
+## update_order
+
+Update an order by id
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations
+
+s = epilot.Epilot()
+
+req = operations.UpdateOrderRequest(
+ request_body={
+ "key": 'string',
+ },
+ id='5da0a718-c822-403d-9f5d-20d4584e0528',
+)
+
+res = s.ecp.update_order(req, operations.UpdateOrderSecurity(
+ portal_auth="",
+))
+
+if res.update_order_200_application_json_object is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- |
+| `request` | [operations.UpdateOrderRequest](../../models/operations/updateorderrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+| `security` | [operations.UpdateOrderSecurity](../../models/operations/updateordersecurity.md) | :heavy_check_mark: | The security requirements to use for the request. |
+
+
+### Response
+
+**[operations.UpdateOrderResponse](../../models/operations/updateorderresponse.md)**
+
+
+## update_portal_user
+
+Update the portal user details
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations
+
+s = epilot.Epilot()
+
+req = {
+ "key": 'string',
+}
+
+res = s.ecp.update_portal_user(req, operations.UpdatePortalUserSecurity(
+ portal_auth="",
+))
+
+if res.update_portal_user_200_application_json_object is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ |
+| `request` | [Dict[str, Any]](../../models//.md) | :heavy_check_mark: | The request object to use for the request. |
+| `security` | [operations.UpdatePortalUserSecurity](../../models/operations/updateportalusersecurity.md) | :heavy_check_mark: | The security requirements to use for the request. |
+
+
+### Response
+
+**[operations.UpdatePortalUserResponse](../../models/operations/updateportaluserresponse.md)**
+
diff --git a/customer_portal/docs/sdks/ecpadmin/README.md b/customer_portal/docs/sdks/ecpadmin/README.md
new file mode 100755
index 000000000..0484ae7eb
--- /dev/null
+++ b/customer_portal/docs/sdks/ecpadmin/README.md
@@ -0,0 +1,869 @@
+# ECPAdmin
+(*ecp_admin*)
+
+## Overview
+
+APIs defined for a ECP Admin
+
+### Available Operations
+
+* [configure_distribution](#configure_distribution) - configureDistribution
+* [create_sso_user](#create_sso_user) - createSSOUser
+* [delete_portal](#delete_portal) - deletePortal
+* [extra_permission_attributes](#extra_permission_attributes) - extraPermissionAttributes
+* [fetch_portal_users_by_related_entity](#fetch_portal_users_by_related_entity) - fetchPortalUsersByRelatedEntity
+* [get_all_portal_configs](#get_all_portal_configs) - getAllPortalConfigs
+* [get_ecp_contact](#get_ecp_contact) - getECPContact
+* [get_email_templates](#get_email_templates) - getEmailTemplates
+* [get_entity_identifiers](#get_entity_identifiers) - getEntityIdentifiers
+* [get_org_portal_config](#get_org_portal_config) - getOrgPortalConfig
+* [get_portal_config](#get_portal_config) - getPortalConfig
+* [get_portal_widgets](#get_portal_widgets) - getPortalWidgets
+* [get_valid_secondary_attributes](#get_valid_secondary_attributes) - getValidSecondaryAttributes
+* [login_to_portal_as_user](#login_to_portal_as_user) - loginToPortalAsUser
+* [replace_ecp_template_variables](#replace_ecp_template_variables) - replaceECPTemplateVariables
+* [save_portal_files](#save_portal_files) - savePortalFiles
+* [upsert_email_templates](#upsert_email_templates) - upsertEmailTemplates
+* [upsert_portal](#upsert_portal) - upsertPortal
+* [upsert_portal_widget](#upsert_portal_widget) - upsertPortalWidget
+
+## configure_distribution
+
+Configure the distribution for the portal's custom domain
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations, shared
+
+s = epilot.Epilot()
+
+req = operations.ConfigureDistributionRequest(
+ origin=shared.Origin.INSTALLER_PORTAL,
+)
+
+res = s.ecp_admin.configure_distribution(req, operations.ConfigureDistributionSecurity(
+ epilot_auth="",
+))
+
+if res.configure_distribution_200_application_json_object is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- |
+| `request` | [operations.ConfigureDistributionRequest](../../models/operations/configuredistributionrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+| `security` | [operations.ConfigureDistributionSecurity](../../models/operations/configuredistributionsecurity.md) | :heavy_check_mark: | The security requirements to use for the request. |
+
+
+### Response
+
+**[operations.ConfigureDistributionResponse](../../models/operations/configuredistributionresponse.md)**
+
+
+## create_sso_user
+
+Creates a portal user as an SSO user.
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations, shared
+
+s = epilot.Epilot()
+
+req = operations.CreateSSOUserRequest(
+ create_sso_user_request=shared.CreateSSOUserRequest(
+ email='testemail921@yopmail.com',
+ first_name='John',
+ last_name='Doe',
+ ),
+ origin=shared.Origin.END_CUSTOMER_PORTAL,
+)
+
+res = s.ecp_admin.create_sso_user(req, operations.CreateSSOUserSecurity(
+ epilot_auth="",
+))
+
+if res.create_sso_user_201_application_json_object is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ |
+| `request` | [operations.CreateSSOUserRequest](../../models/operations/createssouserrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+| `security` | [operations.CreateSSOUserSecurity](../../models/operations/createssousersecurity.md) | :heavy_check_mark: | The security requirements to use for the request. |
+
+
+### Response
+
+**[operations.CreateSSOUserResponse](../../models/operations/createssouserresponse.md)**
+
+
+## delete_portal
+
+Deletes the portal.
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations, shared
+
+s = epilot.Epilot()
+
+req = operations.DeletePortalRequest(
+ origin=shared.Origin.END_CUSTOMER_PORTAL,
+)
+
+res = s.ecp_admin.delete_portal(req, operations.DeletePortalSecurity(
+ epilot_auth="",
+))
+
+if res.status_code == 200:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- |
+| `request` | [operations.DeletePortalRequest](../../models/operations/deleteportalrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+| `security` | [operations.DeletePortalSecurity](../../models/operations/deleteportalsecurity.md) | :heavy_check_mark: | The security requirements to use for the request. |
+
+
+### Response
+
+**[operations.DeletePortalResponse](../../models/operations/deleteportalresponse.md)**
+
+
+## extra_permission_attributes
+
+Retrieves the extra permission attributes.
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations
+
+s = epilot.Epilot()
+
+
+res = s.ecp_admin.extra_permission_attributes(operations.ExtraPermissionAttributesSecurity(
+ epilot_auth="",
+))
+
+if res.extra_permission_attributes_200_application_json_object is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ |
+| `security` | [operations.ExtraPermissionAttributesSecurity](../../models/operations/extrapermissionattributessecurity.md) | :heavy_check_mark: | The security requirements to use for the request. |
+
+
+### Response
+
+**[operations.ExtraPermissionAttributesResponse](../../models/operations/extrapermissionattributesresponse.md)**
+
+
+## fetch_portal_users_by_related_entity
+
+Get all users for a given entity
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations, shared
+
+s = epilot.Epilot()
+
+req = operations.FetchPortalUsersByRelatedEntityRequest(
+ entity_id='5da0a718-c822-403d-9f5d-20d4584e0528',
+ slug=shared.EntitySlug.CONTACT,
+)
+
+res = s.ecp_admin.fetch_portal_users_by_related_entity(req, operations.FetchPortalUsersByRelatedEntitySecurity(
+ epilot_auth="",
+))
+
+if res.fetch_portal_users_by_related_entity_200_application_json_object is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ |
+| `request` | [operations.FetchPortalUsersByRelatedEntityRequest](../../models/operations/fetchportalusersbyrelatedentityrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+| `security` | [operations.FetchPortalUsersByRelatedEntitySecurity](../../models/operations/fetchportalusersbyrelatedentitysecurity.md) | :heavy_check_mark: | The security requirements to use for the request. |
+
+
+### Response
+
+**[operations.FetchPortalUsersByRelatedEntityResponse](../../models/operations/fetchportalusersbyrelatedentityresponse.md)**
+
+
+## get_all_portal_configs
+
+Retrieves all portal configurations.
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations
+
+s = epilot.Epilot()
+
+
+res = s.ecp_admin.get_all_portal_configs(operations.GetAllPortalConfigsSecurity(
+ epilot_auth="",
+))
+
+if res.get_all_portal_configs_200_application_json_object is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ |
+| `security` | [operations.GetAllPortalConfigsSecurity](../../models/operations/getallportalconfigssecurity.md) | :heavy_check_mark: | The security requirements to use for the request. |
+
+
+### Response
+
+**[operations.GetAllPortalConfigsResponse](../../models/operations/getallportalconfigsresponse.md)**
+
+
+## get_ecp_contact
+
+Get the Contact by id
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations
+
+s = epilot.Epilot()
+
+req = operations.GetECPContactRequest(
+ id='1234',
+)
+
+res = s.ecp_admin.get_ecp_contact(req, operations.GetECPContactSecurity(
+ epilot_auth="",
+))
+
+if res.get_ecp_contact_200_application_json_object is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ |
+| `request` | [operations.GetECPContactRequest](../../models/operations/getecpcontactrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+| `security` | [operations.GetECPContactSecurity](../../models/operations/getecpcontactsecurity.md) | :heavy_check_mark: | The security requirements to use for the request. |
+
+
+### Response
+
+**[operations.GetECPContactResponse](../../models/operations/getecpcontactresponse.md)**
+
+
+## get_email_templates
+
+Retrieves the email templates of a portal
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations, shared
+
+s = epilot.Epilot()
+
+req = operations.GetEmailTemplatesRequest(
+ origin=shared.Origin.END_CUSTOMER_PORTAL,
+)
+
+res = s.ecp_admin.get_email_templates(req, operations.GetEmailTemplatesSecurity(
+ epilot_auth="",
+))
+
+if res.email_templates is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- |
+| `request` | [operations.GetEmailTemplatesRequest](../../models/operations/getemailtemplatesrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+| `security` | [operations.GetEmailTemplatesSecurity](../../models/operations/getemailtemplatessecurity.md) | :heavy_check_mark: | The security requirements to use for the request. |
+
+
+### Response
+
+**[operations.GetEmailTemplatesResponse](../../models/operations/getemailtemplatesresponse.md)**
+
+
+## get_entity_identifiers
+
+Retrieve a list of entity identifiers used for entity search by portal users.
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations, shared
+
+s = epilot.Epilot()
+
+req = operations.GetEntityIdentifiersRequest(
+ slug=shared.EntitySlug.CONTACT,
+)
+
+res = s.ecp_admin.get_entity_identifiers(req, operations.GetEntityIdentifiersSecurity(
+ epilot_auth="",
+))
+
+if res.get_entity_identifiers_200_application_json_object is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- |
+| `request` | [operations.GetEntityIdentifiersRequest](../../models/operations/getentityidentifiersrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+| `security` | [operations.GetEntityIdentifiersSecurity](../../models/operations/getentityidentifierssecurity.md) | :heavy_check_mark: | The security requirements to use for the request. |
+
+
+### Response
+
+**[operations.GetEntityIdentifiersResponse](../../models/operations/getentityidentifiersresponse.md)**
+
+
+## get_org_portal_config
+
+Retrieves the portal configuration for the organization.
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations, shared
+
+s = epilot.Epilot()
+
+req = operations.GetOrgPortalConfigRequest(
+ origin=shared.Origin.INSTALLER_PORTAL,
+)
+
+res = s.ecp_admin.get_org_portal_config(req, operations.GetOrgPortalConfigSecurity(
+ epilot_auth="",
+))
+
+if res.portal_config is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- |
+| `request` | [operations.GetOrgPortalConfigRequest](../../models/operations/getorgportalconfigrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+| `security` | [operations.GetOrgPortalConfigSecurity](../../models/operations/getorgportalconfigsecurity.md) | :heavy_check_mark: | The security requirements to use for the request. |
+
+
+### Response
+
+**[operations.GetOrgPortalConfigResponse](../../models/operations/getorgportalconfigresponse.md)**
+
+
+## get_portal_config
+
+Retrieves the portal configuration.
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations, shared
+
+s = epilot.Epilot()
+
+req = operations.GetPortalConfigRequest()
+
+res = s.ecp_admin.get_portal_config(req, operations.GetPortalConfigSecurity(
+ epilot_auth="",
+))
+
+if res.portal_config is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- |
+| `request` | [operations.GetPortalConfigRequest](../../models/operations/getportalconfigrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+| `security` | [operations.GetPortalConfigSecurity](../../models/operations/getportalconfigsecurity.md) | :heavy_check_mark: | The security requirements to use for the request. |
+
+
+### Response
+
+**[operations.GetPortalConfigResponse](../../models/operations/getportalconfigresponse.md)**
+
+
+## get_portal_widgets
+
+Retrieves the widgets of a portal
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations, shared
+
+s = epilot.Epilot()
+
+req = operations.GetPortalWidgetsRequest()
+
+res = s.ecp_admin.get_portal_widgets(req, operations.GetPortalWidgetsSecurity(
+ epilot_auth="",
+))
+
+if res.upsert_portal_widget is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ |
+| `request` | [operations.GetPortalWidgetsRequest](../../models/operations/getportalwidgetsrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+| `security` | [operations.GetPortalWidgetsSecurity](../../models/operations/getportalwidgetssecurity.md) | :heavy_check_mark: | The security requirements to use for the request. |
+
+
+### Response
+
+**[operations.GetPortalWidgetsResponse](../../models/operations/getportalwidgetsresponse.md)**
+
+
+## get_valid_secondary_attributes
+
+Get valid secondary attributes that are used while mapping a contact on registration
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations
+
+s = epilot.Epilot()
+
+
+res = s.ecp_admin.get_valid_secondary_attributes(operations.GetValidSecondaryAttributesSecurity(
+ epilot_auth="",
+))
+
+if res.get_valid_secondary_attributes_200_application_json_object is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- |
+| `security` | [operations.GetValidSecondaryAttributesSecurity](../../models/operations/getvalidsecondaryattributessecurity.md) | :heavy_check_mark: | The security requirements to use for the request. |
+
+
+### Response
+
+**[operations.GetValidSecondaryAttributesResponse](../../models/operations/getvalidsecondaryattributesresponse.md)**
+
+
+## login_to_portal_as_user
+
+Generate a token to log in to a portal impersonating a users.
+
+Token is valid for 5 minutes.
+
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations, shared
+
+s = epilot.Epilot()
+
+req = operations.LoginToPortalAsUserRequestBody(
+ email='portal-customer@email.com',
+)
+
+res = s.ecp_admin.login_to_portal_as_user(req, operations.LoginToPortalAsUserSecurity(
+ epilot_auth="",
+))
+
+if res.login_to_portal_as_user_200_application_json_object is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ |
+| `request` | [operations.LoginToPortalAsUserRequestBody](../../models/operations/logintoportalasuserrequestbody.md) | :heavy_check_mark: | The request object to use for the request. |
+| `security` | [operations.LoginToPortalAsUserSecurity](../../models/operations/logintoportalasusersecurity.md) | :heavy_check_mark: | The security requirements to use for the request. |
+
+
+### Response
+
+**[operations.LoginToPortalAsUserResponse](../../models/operations/logintoportalasuserresponse.md)**
+
+
+## replace_ecp_template_variables
+
+Replaces the template variables of a portal
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations
+
+s = epilot.Epilot()
+
+req = operations.ReplaceECPTemplateVariablesRequestBody(
+ contact_id='7aa44fb8-d60e-40cc-9a3a-ba09a1ff7f51',
+)
+
+res = s.ecp_admin.replace_ecp_template_variables(req, operations.ReplaceECPTemplateVariablesSecurity(
+ epilot_auth="",
+))
+
+if res.replace_ecp_template_variables_200_application_json_object is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
+| `request` | [operations.ReplaceECPTemplateVariablesRequestBody](../../models/operations/replaceecptemplatevariablesrequestbody.md) | :heavy_check_mark: | The request object to use for the request. |
+| `security` | [operations.ReplaceECPTemplateVariablesSecurity](../../models/operations/replaceecptemplatevariablessecurity.md) | :heavy_check_mark: | The security requirements to use for the request. |
+
+
+### Response
+
+**[operations.ReplaceECPTemplateVariablesResponse](../../models/operations/replaceecptemplatevariablesresponse.md)**
+
+
+## save_portal_files
+
+Add files to portal
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations, shared
+
+s = epilot.Epilot()
+
+req = shared.SavePortalFile(
+ files=[
+ shared.SavePortalFileFiles(
+ tags=[
+ 'string',
+ ],
+ file_type='orderRightTeaser',
+ filename='12345',
+ s3ref=shared.SavePortalFileFilesS3ref(
+ bucket='12345',
+ key='12345',
+ ),
+ ),
+ ],
+ origin=shared.Origin.INSTALLER_PORTAL,
+)
+
+res = s.ecp_admin.save_portal_files(req, operations.SavePortalFilesSecurity(
+ epilot_auth="",
+))
+
+if res.save_portal_files_201_application_json_object is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- |
+| `request` | [shared.SavePortalFile](../../models/shared/saveportalfile.md) | :heavy_check_mark: | The request object to use for the request. |
+| `security` | [operations.SavePortalFilesSecurity](../../models/operations/saveportalfilessecurity.md) | :heavy_check_mark: | The security requirements to use for the request. |
+
+
+### Response
+
+**[operations.SavePortalFilesResponse](../../models/operations/saveportalfilesresponse.md)**
+
+
+## upsert_email_templates
+
+Upserts the email templates of a portal
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations, shared
+
+s = epilot.Epilot()
+
+req = operations.UpsertEmailTemplatesRequest(
+ email_templates=shared.EmailTemplates(
+ confirm_account='701f089d-6953-48b5-ac35-442de7c59cd3',
+ forgot_password='6538fddb-f0e9-4f0f-af51-6e57891ff20a',
+ invitation='14ae65fb-0dc1-4863-8743-6bc01da469f6',
+ on_map_a_pending_user='940134fa-50f2-4204-a08a-fd3afddbf39a',
+ on_new_quote='b03e2b88-8f3f-4a93-8118-1fb07e9198a1',
+ ),
+ origin=shared.Origin.END_CUSTOMER_PORTAL,
+)
+
+res = s.ecp_admin.upsert_email_templates(req, operations.UpsertEmailTemplatesSecurity(
+ epilot_auth="",
+))
+
+if res.upsert_email_templates_200_application_json_object is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- |
+| `request` | [operations.UpsertEmailTemplatesRequest](../../models/operations/upsertemailtemplatesrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+| `security` | [operations.UpsertEmailTemplatesSecurity](../../models/operations/upsertemailtemplatessecurity.md) | :heavy_check_mark: | The security requirements to use for the request. |
+
+
+### Response
+
+**[operations.UpsertEmailTemplatesResponse](../../models/operations/upsertemailtemplatesresponse.md)**
+
+
+## upsert_portal
+
+Upserts the settings for a portal of an organization.
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations, shared
+
+s = epilot.Epilot()
+
+req = operations.UpsertPortalRequest(
+ upsert_portal_config=shared.UpsertPortalConfig(
+ cognito_details=shared.UpsertPortalConfigCognitoDetails(
+ cognito_user_pool_arn='arn:aws:cognito-idp:us-east-1:123412341234:userpool/us-east-1_123412341',
+ cognito_user_pool_client_id='6bsd0jkgoie74k2i8mrhc1vest',
+ cognito_user_pool_id='eu-central-1_CUEQRNbUb',
+ ),
+ contact_identifiers=[
+ 'email',
+ 'last_name',
+ ],
+ contact_secondary_identifier='full_name',
+ default_user_to_notify=shared.UpsertPortalConfigDefaultUserToNotify(
+ on_pending_user=[
+ shared.AdminUser(
+ additional_properties={
+ "key": 'string',
+ },
+ display_name='John',
+ email='j.doe@epilot.cloud',
+ image_uri=shared.AdminUserImageURI(
+ key='fuafjvoHKsudhfagweucjasdvga',
+ original='https://fuafjvoHKsu.cloudimg.io/v7/e-mage-sam-bucket-dev.s3.eu-central-1.amazonaws.com/files/fuafjvoHKsudhfagweucjasdvga/original',
+ thumbnail_32='https://fuafjvoHKsu.cloudimg.io/v7/e-mage-sam-bucket-dev.s3.eu-central-1.amazonaws.com/files/fuafjvoHKsudhfagweucjasdvga/original?w=32&h=32',
+ thumbnail_64='https://fuafjvoHKsu.cloudimg.io/v7/e-mage-sam-bucket-dev.s3.eu-central-1.amazonaws.com/files/fuafjvoHKsudhfagweucjasdvga/original?w=64&h=64',
+ ),
+ org_id='123',
+ phone='12345 67890',
+ type='user',
+ user_id='123456',
+ ),
+ ],
+ ),
+ design_id='9ba94f20-b872-4217-a259-2a90a8ee1a29',
+ domain='abc.com',
+ email_templates=shared.EmailTemplates(
+ confirm_account='701f089d-6953-48b5-ac35-442de7c59cd3',
+ forgot_password='6538fddb-f0e9-4f0f-af51-6e57891ff20a',
+ invitation='14ae65fb-0dc1-4863-8743-6bc01da469f6',
+ on_map_a_pending_user='940134fa-50f2-4204-a08a-fd3afddbf39a',
+ on_new_quote='b03e2b88-8f3f-4a93-8118-1fb07e9198a1',
+ ),
+ entity_actions=[
+ shared.UpsertPortalConfigEntityActions(
+ action_label=shared.UpsertPortalConfigEntityActionsActionLabel(),
+ slug=shared.EntitySlug.CONTACT,
+ ),
+ ],
+ entity_edit_rules=[
+ shared.UpsertPortalConfigEntityEditRules(
+ allowed_decrement='10%',
+ allowed_increment='10%',
+ attribute='first_name',
+ cadence_period=1,
+ changes_allowed=1,
+ grace_period=1,
+ number_of_days_before_restriction=10,
+ slug=shared.EntitySlug.CONTACT,
+ ),
+ ],
+ entity_identifiers=shared.UpsertPortalConfigEntityIdentifiers(
+ type=shared.UpsertPortalConfigEntityIdentifiersType(
+ attributes=[
+ 'c',
+ 'o',
+ 'n',
+ 't',
+ 'r',
+ 'a',
+ 'c',
+ 't',
+ '_',
+ 'n',
+ 'u',
+ 'm',
+ 'b',
+ 'e',
+ 'r',
+ ],
+ ),
+ ),
+ feature_settings=shared.UpsertPortalConfigFeatureSettings(),
+ grants=[
+ shared.Grant(
+ action='entity-read',
+ resource='entity:123:contact:f7c22299-ca72-4bca-8538-0a88eeefc947',
+ ),
+ ],
+ images=shared.UpsertPortalConfigImages(
+ order_left_teaser='https://epilot-bucket.s3.eu-central-1.amazonaws.com/12344/6538fddb-f0e9-4f0f-af51-6e57891ff20a/order-left-teaser.jpeg',
+ order_right_teaser='https://epilot-bucket.s3.eu-central-1.amazonaws.com/12344/6538fddb-f0e9-4f0f-af51-6e57891ff20a/order-right-teaser.jpeg',
+ welcome_banner='https://epilot-bucket.s3.eu-central-1.amazonaws.com/12344/6538fddb-f0e9-4f0f-af51-6e57891ff20a/welcome-banner.jpeg',
+ ),
+ name='Installer Portal',
+ self_registration=False,
+ ),
+ origin=shared.Origin.INSTALLER_PORTAL,
+)
+
+res = s.ecp_admin.upsert_portal(req, operations.UpsertPortalSecurity(
+ epilot_auth="",
+))
+
+if res.portal_config is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- |
+| `request` | [operations.UpsertPortalRequest](../../models/operations/upsertportalrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+| `security` | [operations.UpsertPortalSecurity](../../models/operations/upsertportalsecurity.md) | :heavy_check_mark: | The security requirements to use for the request. |
+
+
+### Response
+
+**[operations.UpsertPortalResponse](../../models/operations/upsertportalresponse.md)**
+
+
+## upsert_portal_widget
+
+Upsert widget for a portal of an organization.
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations, shared
+
+s = epilot.Epilot()
+
+req = operations.UpsertPortalWidgetRequest(
+ upsert_portal_widget=shared.UpsertPortalWidget(
+ widgets=[
+ shared.WidgetBase(
+ headline=shared.WidgetBaseHeadline(),
+ id='',
+ list_index=393843,
+ sub_headline=shared.WidgetBaseSubHeadline(),
+ type=shared.WidgetBaseType.ACTION_WIDGET,
+ ),
+ ],
+ ),
+ origin=shared.Origin.INSTALLER_PORTAL,
+)
+
+res = s.ecp_admin.upsert_portal_widget(req, operations.UpsertPortalWidgetSecurity(
+ epilot_auth="",
+))
+
+if res.upsert_portal_widget is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- |
+| `request` | [operations.UpsertPortalWidgetRequest](../../models/operations/upsertportalwidgetrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+| `security` | [operations.UpsertPortalWidgetSecurity](../../models/operations/upsertportalwidgetsecurity.md) | :heavy_check_mark: | The security requirements to use for the request. |
+
+
+### Response
+
+**[operations.UpsertPortalWidgetResponse](../../models/operations/upsertportalwidgetresponse.md)**
+
diff --git a/customer_portal/docs/sdks/epilot/README.md b/customer_portal/docs/sdks/epilot/README.md
new file mode 100755
index 000000000..0460aed8f
--- /dev/null
+++ b/customer_portal/docs/sdks/epilot/README.md
@@ -0,0 +1,9 @@
+# Epilot SDK
+
+
+## Overview
+
+Portal API: Backend for epilot portals - End Customer Portal & Installer Portal
+
+### Available Operations
+
diff --git a/customer_portal/docs/sdks/public/README.md b/customer_portal/docs/sdks/public/README.md
new file mode 100755
index 000000000..ec2e76cfa
--- /dev/null
+++ b/customer_portal/docs/sdks/public/README.md
@@ -0,0 +1,353 @@
+# Public
+(*public*)
+
+## Overview
+
+Public APIs
+
+### Available Operations
+
+* [confirm_user](#confirm_user) - confirmUser
+* [create_user](#create_user) - createUser
+* [get_contact_count](#get_contact_count) - getContactCount
+* [get_count_by_email](#get_count_by_email) - getCountByEmail
+* [get_portal_config_by_domain](#get_portal_config_by_domain) - getPortalConfigByDomain
+* [get_public_portal_config](#get_public_portal_config) - getPublicPortalConfig
+* [get_public_portal_widgets](#get_public_portal_widgets) - getPublicPortalWidgets
+* [user_exists](#user_exists) - userExists
+
+## confirm_user
+
+Confirm a portal user
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations, shared
+
+s = epilot.Epilot(
+ security=shared.Security(
+ epilot_auth="",
+ ),
+)
+
+req = operations.ConfirmUserRequest(
+ id='5da0a718-c822-403d-9f5d-20d4584e0528',
+ org_id='123',
+ origin=shared.Origin.INSTALLER_PORTAL,
+)
+
+res = s.public.confirm_user(req)
+
+if res.status_code == 200:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ |
+| `request` | [operations.ConfirmUserRequest](../../models/operations/confirmuserrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+
+
+### Response
+
+**[operations.ConfirmUserResponse](../../models/operations/confirmuserresponse.md)**
+
+
+## create_user
+
+Registers a portal user
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations, shared
+
+s = epilot.Epilot(
+ security=shared.Security(
+ epilot_auth="",
+ ),
+)
+
+req = operations.CreateUserRequest(
+ create_user_request=shared.CreateUserRequest(
+ contact_id='123456',
+ contact_identifiers={
+ "key": 'string',
+ },
+ email='testemail921@yopmail.com',
+ first_name='John',
+ last_name='Doe',
+ org_id='728',
+ password='124n$aAJs*d41h4',
+ secondary_identifier='123456',
+ ),
+ origin=shared.Origin.INSTALLER_PORTAL,
+)
+
+res = s.public.create_user(req)
+
+if res.create_user_201_application_json_object is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- |
+| `request` | [operations.CreateUserRequest](../../models/operations/createuserrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+
+
+### Response
+
+**[operations.CreateUserResponse](../../models/operations/createuserresponse.md)**
+
+
+## get_contact_count
+
+Check existence of contacts.
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations, shared
+
+s = epilot.Epilot(
+ security=shared.Security(
+ epilot_auth="",
+ ),
+)
+
+req = operations.GetContactCountRequest(
+ contact_count_request=shared.ContactCountRequest(
+ contact_identifiers={
+ "key": 'string',
+ },
+ org_id='728',
+ ),
+ origin=shared.Origin.END_CUSTOMER_PORTAL,
+)
+
+res = s.public.get_contact_count(req)
+
+if res.get_contact_count_200_application_json_object is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- |
+| `request` | [operations.GetContactCountRequest](../../models/operations/getcontactcountrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+
+
+### Response
+
+**[operations.GetContactCountResponse](../../models/operations/getcontactcountresponse.md)**
+
+
+## get_count_by_email
+
+Check Contact by email
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations, shared
+
+s = epilot.Epilot(
+ security=shared.Security(
+ epilot_auth="",
+ ),
+)
+
+req = operations.GetCountByEmailRequest(
+ email='test@test.com',
+ org_id='123',
+)
+
+res = s.public.get_count_by_email(req)
+
+if res.get_count_by_email_200_application_json_object is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- |
+| `request` | [operations.GetCountByEmailRequest](../../models/operations/getcountbyemailrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+
+
+### Response
+
+**[operations.GetCountByEmailResponse](../../models/operations/getcountbyemailresponse.md)**
+
+
+## get_portal_config_by_domain
+
+Retrieves the portal configuration by domain.
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations, shared
+
+s = epilot.Epilot(
+ security=shared.Security(
+ epilot_auth="",
+ ),
+)
+
+req = operations.GetPortalConfigByDomainRequest(
+ domain='example.com',
+)
+
+res = s.public.get_portal_config_by_domain(req)
+
+if res.portal_config is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ |
+| `request` | [operations.GetPortalConfigByDomainRequest](../../models/operations/getportalconfigbydomainrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+
+
+### Response
+
+**[operations.GetPortalConfigByDomainResponse](../../models/operations/getportalconfigbydomainresponse.md)**
+
+
+## get_public_portal_config
+
+Retrieves the public portal configuration.
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations, shared
+
+s = epilot.Epilot(
+ security=shared.Security(
+ epilot_auth="",
+ ),
+)
+
+req = operations.GetPublicPortalConfigRequest(
+ org_id='12324',
+ origin=shared.Origin.INSTALLER_PORTAL,
+)
+
+res = s.public.get_public_portal_config(req)
+
+if res.portal_config is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- |
+| `request` | [operations.GetPublicPortalConfigRequest](../../models/operations/getpublicportalconfigrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+
+
+### Response
+
+**[operations.GetPublicPortalConfigResponse](../../models/operations/getpublicportalconfigresponse.md)**
+
+
+## get_public_portal_widgets
+
+Retrieves the public widgets of a portal
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations, shared
+
+s = epilot.Epilot(
+ security=shared.Security(
+ epilot_auth="",
+ ),
+)
+
+req = operations.GetPublicPortalWidgetsRequest(
+ org_id='123',
+ origin=shared.Origin.END_CUSTOMER_PORTAL,
+)
+
+res = s.public.get_public_portal_widgets(req)
+
+if res.upsert_portal_widget is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- |
+| `request` | [operations.GetPublicPortalWidgetsRequest](../../models/operations/getpublicportalwidgetsrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+
+
+### Response
+
+**[operations.GetPublicPortalWidgetsResponse](../../models/operations/getpublicportalwidgetsresponse.md)**
+
+
+## user_exists
+
+Checks whether a user exists in the portal
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations, shared
+
+s = epilot.Epilot(
+ security=shared.Security(
+ epilot_auth="",
+ ),
+)
+
+req = operations.UserExistsRequest(
+ email='user@example.com',
+ org_id='123',
+)
+
+res = s.public.user_exists(req)
+
+if res.user_exists_200_application_json_object is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- |
+| `request` | [operations.UserExistsRequest](../../models/operations/userexistsrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+
+
+### Response
+
+**[operations.UserExistsResponse](../../models/operations/userexistsresponse.md)**
+
diff --git a/customer_portal/files.gen b/customer_portal/files.gen
index b9236bc27..00b47137d 100755
--- a/customer_portal/files.gen
+++ b/customer_portal/files.gen
@@ -1,3 +1,6 @@
+src/epilot/sdkconfiguration.py
+src/epilot/activity.py
+src/epilot/balance.py
src/epilot/ecp.py
src/epilot/ecp_admin.py
src/epilot/public.py
@@ -6,65 +9,457 @@ pylintrc
setup.py
src/epilot/__init__.py
src/epilot/models/__init__.py
+src/epilot/models/errors/sdkerror.py
src/epilot/utils/__init__.py
src/epilot/utils/retries.py
src/epilot/utils/utils.py
+src/epilot/models/operations/getentityactivityfeed.py
+src/epilot/models/operations/getcustomerbalance.py
src/epilot/models/operations/addendcustomerrelationtoentity.py
+src/epilot/models/operations/createcustomentityactivity.py
src/epilot/models/operations/deleteentityfile.py
src/epilot/models/operations/deleteportaluser.py
src/epilot/models/operations/getallcontracts.py
+src/epilot/models/operations/getallfiles.py
src/epilot/models/operations/getallopportunities.py
src/epilot/models/operations/getallorders.py
+src/epilot/models/operations/getbillingevents.py
src/epilot/models/operations/getcontact.py
src/epilot/models/operations/getcontract.py
src/epilot/models/operations/getentitiesbyidentifiers.py
+src/epilot/models/operations/getfilebyid.py
+src/epilot/models/operations/getfilescountbyentity.py
src/epilot/models/operations/getopportunity.py
src/epilot/models/operations/getorder.py
src/epilot/models/operations/getorganizationsettings.py
src/epilot/models/operations/getportalconfig.py
-src/epilot/models/operations/getportalconfigbydomain.py
src/epilot/models/operations/getportaluser.py
+src/epilot/models/operations/getportalwidgets.py
src/epilot/models/operations/getschemas.py
src/epilot/models/operations/saveentityfile.py
-src/epilot/models/operations/testauth.py
+src/epilot/models/operations/trackfiledownloaded.py
+src/epilot/models/operations/triggerentityaccess.py
src/epilot/models/operations/updatecontact.py
src/epilot/models/operations/updatecontract.py
src/epilot/models/operations/updateopportunity.py
src/epilot/models/operations/updateorder.py
src/epilot/models/operations/updateportaluser.py
src/epilot/models/operations/configuredistribution.py
+src/epilot/models/operations/createssouser.py
src/epilot/models/operations/deleteportal.py
src/epilot/models/operations/extrapermissionattributes.py
+src/epilot/models/operations/fetchportalusersbyrelatedentity.py
src/epilot/models/operations/getallportalconfigs.py
src/epilot/models/operations/getecpcontact.py
src/epilot/models/operations/getemailtemplates.py
src/epilot/models/operations/getentityidentifiers.py
src/epilot/models/operations/getorgportalconfig.py
-src/epilot/models/operations/getpublicportalconfig.py
src/epilot/models/operations/getvalidsecondaryattributes.py
+src/epilot/models/operations/logintoportalasuser.py
src/epilot/models/operations/replaceecptemplatevariables.py
src/epilot/models/operations/saveportalfiles.py
src/epilot/models/operations/upsertemailtemplates.py
src/epilot/models/operations/upsertportal.py
-src/epilot/models/operations/activateuser.py
+src/epilot/models/operations/upsertportalwidget.py
src/epilot/models/operations/confirmuser.py
src/epilot/models/operations/createuser.py
+src/epilot/models/operations/getcontactcount.py
src/epilot/models/operations/getcountbyemail.py
+src/epilot/models/operations/getportalconfigbydomain.py
+src/epilot/models/operations/getpublicportalconfig.py
+src/epilot/models/operations/getpublicportalwidgets.py
src/epilot/models/operations/userexists.py
src/epilot/models/operations/__init__.py
-src/epilot/models/shared/deleteentityfile.py
+src/epilot/models/shared/activityitem.py
+src/epilot/models/shared/activitycallercontext.py
+src/epilot/models/shared/entityslug.py
+src/epilot/models/shared/balance.py
+src/epilot/models/shared/entityitem.py
src/epilot/models/shared/errorresp.py
+src/epilot/models/shared/activity.py
+src/epilot/models/shared/deleteentityfile.py
+src/epilot/models/shared/contract.py
+src/epilot/models/shared/fileitem.py
+src/epilot/models/shared/opportunity.py
+src/epilot/models/shared/order.py
+src/epilot/models/shared/billingevent.py
+src/epilot/models/shared/installmentevent.py
+src/epilot/models/shared/file.py
+src/epilot/models/shared/contact.py
+src/epilot/models/shared/entityfilecount.py
+src/epilot/models/shared/product.py
src/epilot/models/shared/organizationsettings.py
src/epilot/models/shared/portalconfig.py
-src/epilot/models/shared/origin_enum.py
+src/epilot/models/shared/origin.py
src/epilot/models/shared/grant.py
+src/epilot/models/shared/emailtemplates.py
+src/epilot/models/shared/adminuser.py
+src/epilot/models/shared/portaluser.py
+src/epilot/models/shared/upsertportalwidget.py
+src/epilot/models/shared/entitywidget.py
+src/epilot/models/shared/contentwidget.py
+src/epilot/models/shared/actionwidget.py
+src/epilot/models/shared/widgetaction.py
+src/epilot/models/shared/teaserwidget.py
+src/epilot/models/shared/widgetbase.py
+src/epilot/models/shared/schema.py
src/epilot/models/shared/saveentityfile.py
+src/epilot/models/shared/failedruleerrorresp.py
+src/epilot/models/shared/createssouserrequest.py
src/epilot/models/shared/extraschemaattributes.py
-src/epilot/models/shared/emailtemplates.py
src/epilot/models/shared/saveportalfile.py
-src/epilot/models/shared/addportalresp.py
src/epilot/models/shared/upsertportalconfig.py
-src/epilot/models/shared/useractivationpayload.py
+src/epilot/models/shared/createuserrequest.py
+src/epilot/models/shared/contactcountrequest.py
src/epilot/models/shared/security.py
src/epilot/models/shared/__init__.py
-USAGE.md
\ No newline at end of file
+src/epilot/models/errors/__init__.py
+USAGE.md
+docs/models/operations/getentityactivityfeedrequest.md
+docs/models/operations/getentityactivityfeed200applicationjson.md
+docs/models/operations/getentityactivityfeedresponse.md
+docs/models/operations/getcustomerbalancesecurity.md
+docs/models/operations/getcustomerbalancerequest.md
+docs/models/operations/getcustomerbalanceresponse.md
+docs/models/operations/addendcustomerrelationtoentitysecurity.md
+docs/models/operations/addendcustomerrelationtoentityrequest.md
+docs/models/operations/addendcustomerrelationtoentity200applicationjson.md
+docs/models/operations/addendcustomerrelationtoentityresponse.md
+docs/models/operations/createcustomentityactivitysecurity.md
+docs/models/operations/createcustomentityactivityrequest.md
+docs/models/operations/createcustomentityactivityresponse.md
+docs/models/operations/deleteentityfilesecurity.md
+docs/models/operations/deleteentityfile202applicationjson.md
+docs/models/operations/deleteentityfileresponse.md
+docs/models/operations/deleteportalusersecurity.md
+docs/models/operations/deleteportaluser200applicationjsonmessage.md
+docs/models/operations/deleteportaluser200applicationjson.md
+docs/models/operations/deleteportaluserresponse.md
+docs/models/operations/getallcontractssecurity.md
+docs/models/operations/getallcontractsrequest.md
+docs/models/operations/getallcontracts200applicationjson.md
+docs/models/operations/getallcontractsresponse.md
+docs/models/operations/getallfilessecurity.md
+docs/models/operations/getallfilesrequest.md
+docs/models/operations/getallfiles200applicationjson.md
+docs/models/operations/getallfilesresponse.md
+docs/models/operations/getallopportunitiessecurity.md
+docs/models/operations/getallopportunitiesrequest.md
+docs/models/operations/getallopportunities200applicationjson.md
+docs/models/operations/getallopportunitiesresponse.md
+docs/models/operations/getallorderssecurity.md
+docs/models/operations/getallordersrequest.md
+docs/models/operations/getallorders200applicationjson.md
+docs/models/operations/getallordersresponse.md
+docs/models/operations/getbillingeventssecurity.md
+docs/models/operations/getbillingeventseventtype.md
+docs/models/operations/getbillingeventsrequest.md
+docs/models/operations/getbillingevents200applicationjson.md
+docs/models/operations/getbillingeventsresponse.md
+docs/models/operations/getcontactsecurity.md
+docs/models/operations/getcontact200applicationjson.md
+docs/models/operations/getcontactresponse.md
+docs/models/operations/getcontractsecurity.md
+docs/models/operations/getcontractrequest.md
+docs/models/operations/getcontract200applicationjson.md
+docs/models/operations/getcontractresponse.md
+docs/models/operations/getentitiesbyidentifierssecurity.md
+docs/models/operations/getentitiesbyidentifiersrequest.md
+docs/models/operations/getentitiesbyidentifiers200applicationjson.md
+docs/models/operations/getentitiesbyidentifiersresponse.md
+docs/models/operations/getfilebyidsecurity.md
+docs/models/operations/getfilebyidrequest.md
+docs/models/operations/getfilebyid200applicationjson.md
+docs/models/operations/getfilebyidresponse.md
+docs/models/operations/getfilescountbyentitysecurity.md
+docs/models/operations/getfilescountbyentityresponse.md
+docs/models/operations/getopportunitysecurity.md
+docs/models/operations/getopportunityrequest.md
+docs/models/operations/getopportunity200applicationjson.md
+docs/models/operations/getopportunityresponse.md
+docs/models/operations/getordersecurity.md
+docs/models/operations/getorderrequest.md
+docs/models/operations/getorder200applicationjson.md
+docs/models/operations/getorderresponse.md
+docs/models/operations/getorganizationsettingssecurity.md
+docs/models/operations/getorganizationsettings200applicationjson.md
+docs/models/operations/getorganizationsettingsresponse.md
+docs/models/operations/getportalconfigsecurity.md
+docs/models/operations/getportalconfigrequest.md
+docs/models/operations/getportalconfigresponse.md
+docs/models/operations/getportalusersecurity.md
+docs/models/operations/getportaluser200applicationjson.md
+docs/models/operations/getportaluserresponse.md
+docs/models/operations/getportalwidgetssecurity.md
+docs/models/operations/getportalwidgetsrequest.md
+docs/models/operations/getportalwidgetsresponse.md
+docs/models/operations/getschemassecurity.md
+docs/models/operations/getschemas200applicationjson.md
+docs/models/operations/getschemasresponse.md
+docs/models/operations/saveentityfilesecurity.md
+docs/models/operations/saveentityfile201applicationjson.md
+docs/models/operations/saveentityfileresponse.md
+docs/models/operations/trackfiledownloadedsecurity.md
+docs/models/operations/trackfiledownloadedrequest.md
+docs/models/operations/trackfiledownloaded200applicationjson.md
+docs/models/operations/trackfiledownloadedresponse.md
+docs/models/operations/triggerentityaccesssecurity.md
+docs/models/operations/triggerentityaccessrequest.md
+docs/models/operations/triggerentityaccess200applicationjson.md
+docs/models/operations/triggerentityaccessresponse.md
+docs/models/operations/updatecontactsecurity.md
+docs/models/operations/updatecontact403applicationjson.md
+docs/models/operations/updatecontact200applicationjson.md
+docs/models/operations/updatecontactresponse.md
+docs/models/operations/updatecontractsecurity.md
+docs/models/operations/updatecontractrequest.md
+docs/models/operations/updatecontract403applicationjson.md
+docs/models/operations/updatecontract200applicationjson.md
+docs/models/operations/updatecontractresponse.md
+docs/models/operations/updateopportunitysecurity.md
+docs/models/operations/updateopportunityrequest.md
+docs/models/operations/updateopportunity200applicationjson.md
+docs/models/operations/updateopportunityresponse.md
+docs/models/operations/updateordersecurity.md
+docs/models/operations/updateorderrequest.md
+docs/models/operations/updateorder200applicationjson.md
+docs/models/operations/updateorderresponse.md
+docs/models/operations/updateportalusersecurity.md
+docs/models/operations/updateportaluser200applicationjson.md
+docs/models/operations/updateportaluserresponse.md
+docs/models/operations/configuredistributionsecurity.md
+docs/models/operations/configuredistributionrequest.md
+docs/models/operations/configuredistribution200applicationjson.md
+docs/models/operations/configuredistributionresponse.md
+docs/models/operations/createssousersecurity.md
+docs/models/operations/createssouserrequest.md
+docs/models/operations/createssouser201applicationjson.md
+docs/models/operations/createssouserresponse.md
+docs/models/operations/deleteportalsecurity.md
+docs/models/operations/deleteportalrequest.md
+docs/models/operations/deleteportalresponse.md
+docs/models/operations/extrapermissionattributessecurity.md
+docs/models/operations/extrapermissionattributes200applicationjsondata.md
+docs/models/operations/extrapermissionattributes200applicationjson.md
+docs/models/operations/extrapermissionattributesresponse.md
+docs/models/operations/fetchportalusersbyrelatedentitysecurity.md
+docs/models/operations/fetchportalusersbyrelatedentityrequest.md
+docs/models/operations/fetchportalusersbyrelatedentity200applicationjson.md
+docs/models/operations/fetchportalusersbyrelatedentityresponse.md
+docs/models/operations/getallportalconfigssecurity.md
+docs/models/operations/getallportalconfigs200applicationjson.md
+docs/models/operations/getallportalconfigsresponse.md
+docs/models/operations/getecpcontactsecurity.md
+docs/models/operations/getecpcontactrequest.md
+docs/models/operations/getecpcontact200applicationjson.md
+docs/models/operations/getecpcontactresponse.md
+docs/models/operations/getemailtemplatessecurity.md
+docs/models/operations/getemailtemplatesrequest.md
+docs/models/operations/getemailtemplatesresponse.md
+docs/models/operations/getentityidentifierssecurity.md
+docs/models/operations/getentityidentifiersrequest.md
+docs/models/operations/getentityidentifiers200applicationjsondata.md
+docs/models/operations/getentityidentifiers200applicationjson.md
+docs/models/operations/getentityidentifiersresponse.md
+docs/models/operations/getorgportalconfigsecurity.md
+docs/models/operations/getorgportalconfigrequest.md
+docs/models/operations/getorgportalconfigresponse.md
+docs/models/operations/getvalidsecondaryattributessecurity.md
+docs/models/operations/getvalidsecondaryattributes200applicationjsondata.md
+docs/models/operations/getvalidsecondaryattributes200applicationjson.md
+docs/models/operations/getvalidsecondaryattributesresponse.md
+docs/models/operations/logintoportalasusersecurity.md
+docs/models/operations/logintoportalasuserrequestbody.md
+docs/models/operations/logintoportalasuser200applicationjson.md
+docs/models/operations/logintoportalasuserresponse.md
+docs/models/operations/replaceecptemplatevariablessecurity.md
+docs/models/operations/replaceecptemplatevariablesrequestbody.md
+docs/models/operations/replaceecptemplatevariables200applicationjsoncustomerportal.md
+docs/models/operations/replaceecptemplatevariables200applicationjsoninstallerportal.md
+docs/models/operations/replaceecptemplatevariables200applicationjson.md
+docs/models/operations/replaceecptemplatevariablesresponse.md
+docs/models/operations/saveportalfilessecurity.md
+docs/models/operations/saveportalfiles201applicationjson.md
+docs/models/operations/saveportalfilesresponse.md
+docs/models/operations/upsertemailtemplatessecurity.md
+docs/models/operations/upsertemailtemplatesrequest.md
+docs/models/operations/upsertemailtemplates200applicationjsonmessage.md
+docs/models/operations/upsertemailtemplates200applicationjson.md
+docs/models/operations/upsertemailtemplatesresponse.md
+docs/models/operations/upsertportalsecurity.md
+docs/models/operations/upsertportalrequest.md
+docs/models/operations/upsertportalresponse.md
+docs/models/operations/upsertportalwidgetsecurity.md
+docs/models/operations/upsertportalwidgetrequest.md
+docs/models/operations/upsertportalwidgetresponse.md
+docs/models/operations/confirmuserrequest.md
+docs/models/operations/confirmuserresponse.md
+docs/models/operations/createuserrequest.md
+docs/models/operations/createuser201applicationjsonmessage.md
+docs/models/operations/createuser201applicationjson.md
+docs/models/operations/createuserresponse.md
+docs/models/operations/getcontactcountrequest.md
+docs/models/operations/getcontactcount200applicationjson.md
+docs/models/operations/getcontactcountresponse.md
+docs/models/operations/getcountbyemailrequest.md
+docs/models/operations/getcountbyemail200applicationjson.md
+docs/models/operations/getcountbyemailresponse.md
+docs/models/operations/getportalconfigbydomainrequest.md
+docs/models/operations/getportalconfigbydomainresponse.md
+docs/models/operations/getpublicportalconfigrequest.md
+docs/models/operations/getpublicportalconfigresponse.md
+docs/models/operations/getpublicportalwidgetsrequest.md
+docs/models/operations/getpublicportalwidgetsresponse.md
+docs/models/operations/userexistsrequest.md
+docs/models/operations/userexists200applicationjson.md
+docs/models/operations/userexistsresponse.md
+docs/models/shared/activityitempayloadentity.md
+docs/models/shared/activityitempayload.md
+docs/models/shared/activityitem.md
+docs/models/shared/activitycallercontextportalauthtoken.md
+docs/models/shared/activitycallercontextportalauth.md
+docs/models/shared/activitycallercontext.md
+docs/models/shared/entityslug.md
+docs/models/shared/balance.md
+docs/models/shared/entityitem.md
+docs/models/shared/errorresp.md
+docs/models/shared/activity.md
+docs/models/shared/deleteentityfile.md
+docs/models/shared/contractbillingperiod.md
+docs/models/shared/contractbranch.md
+docs/models/shared/contractnoticetimeunit.md
+docs/models/shared/contractrenewaldurationunit.md
+docs/models/shared/contractstatus.md
+docs/models/shared/contract.md
+docs/models/shared/fileitemrelations.md
+docs/models/shared/fileitemschema.md
+docs/models/shared/fileitemaccesscontrol.md
+docs/models/shared/fileitemtype.md
+docs/models/shared/fileitem.md
+docs/models/shared/opportunityschema.md
+docs/models/shared/opportunity.md
+docs/models/shared/orderschema.md
+docs/models/shared/order.md
+docs/models/shared/billingeventreimbursementeventcontractdollarrelation.md
+docs/models/shared/billingeventreimbursementeventcontract.md
+docs/models/shared/billingeventreimbursementeventtype.md
+docs/models/shared/billingeventreimbursementevent.md
+docs/models/shared/billingevent.md
+docs/models/shared/installmenteventcontractdollarrelation.md
+docs/models/shared/installmenteventcontract.md
+docs/models/shared/installmenteventtype.md
+docs/models/shared/installmentevent.md
+docs/models/shared/fileschema.md
+docs/models/shared/file.md
+docs/models/shared/contactschema.md
+docs/models/shared/contact.md
+docs/models/shared/entityfilecount.md
+docs/models/shared/productschema.md
+docs/models/shared/product.md
+docs/models/shared/organizationsettingsautomationentitymapping.md
+docs/models/shared/organizationsettingsautomationpreview.md
+docs/models/shared/organizationsettingscentralinboxpreviewsetting.md
+docs/models/shared/organizationsettingscontractspreviewsetting.md
+docs/models/shared/organizationsettingsdisableivy.md
+docs/models/shared/organizationsettingsdoubleoptin.md
+docs/models/shared/organizationsettingsecommercecatalogpreview.md
+docs/models/shared/organizationsettingsecommerceopportunitiespreview.md
+docs/models/shared/organizationsettingsecommercepreview.md
+docs/models/shared/organizationsettingsendcustomerportal.md
+docs/models/shared/organizationsettingsentityschemabuilder.md
+docs/models/shared/organizationsettingsinstallerportal.md
+docs/models/shared/organizationsettingslogiceditorpreview.md
+docs/models/shared/organizationsettingsnewnavigation.md
+docs/models/shared/organizationsettingspartnering.md
+docs/models/shared/organizationsettingsproductavailability.md
+docs/models/shared/organizationsettingssso.md
+docs/models/shared/organizationsettingssubmissionpreview.md
+docs/models/shared/organizationsettingsuserrolespreview.md
+docs/models/shared/organizationsettings.md
+docs/models/shared/portalconfigcognitodetails.md
+docs/models/shared/portalconfigdefaultusertonotify.md
+docs/models/shared/portalconfigentityactionsactionlabel.md
+docs/models/shared/portalconfigentityactions.md
+docs/models/shared/portalconfigentityeditrulescadenceperiodtype.md
+docs/models/shared/portalconfigentityeditrulesruletype.md
+docs/models/shared/portalconfigentityeditrules.md
+docs/models/shared/portalconfigentityidentifierstype.md
+docs/models/shared/portalconfigentityidentifiers.md
+docs/models/shared/portalconfigfeaturesettings.md
+docs/models/shared/portalconfigimages.md
+docs/models/shared/portalconfigorgsettingscanary.md
+docs/models/shared/portalconfigorgsettingsreleasecandidate.md
+docs/models/shared/portalconfigorgsettings.md
+docs/models/shared/portalconfigselfregistrationsetting.md
+docs/models/shared/portalconfig.md
+docs/models/shared/origin.md
+docs/models/shared/granteffect.md
+docs/models/shared/grant.md
+docs/models/shared/emailtemplates.md
+docs/models/shared/adminuserimageuri.md
+docs/models/shared/adminuser.md
+docs/models/shared/portaluserschema.md
+docs/models/shared/portaluser.md
+docs/models/shared/upsertportalwidget.md
+docs/models/shared/portalwidget.md
+docs/models/shared/entitywidgetheadline.md
+docs/models/shared/entitywidgetsubheadline.md
+docs/models/shared/entitywidgettype.md
+docs/models/shared/entitywidget.md
+docs/models/shared/contentwidgetheadline.md
+docs/models/shared/contentwidgetsubheadline.md
+docs/models/shared/contentwidgettype.md
+docs/models/shared/contentwidget.md
+docs/models/shared/actionwidgetheadline.md
+docs/models/shared/actionwidgetsubheadline.md
+docs/models/shared/actionwidgettype.md
+docs/models/shared/actionwidget.md
+docs/models/shared/widgetactionlabel.md
+docs/models/shared/widgetactionrules.md
+docs/models/shared/widgetactiontype.md
+docs/models/shared/widgetaction.md
+docs/models/shared/teaserwidgetbuttonlabel.md
+docs/models/shared/teaserwidgetbutton.md
+docs/models/shared/teaserwidgetheadline.md
+docs/models/shared/teaserwidgetsubheadline.md
+docs/models/shared/teaserwidgettype.md
+docs/models/shared/teaserwidget.md
+docs/models/shared/widgetbaseheadline.md
+docs/models/shared/widgetbasesubheadline.md
+docs/models/shared/widgetbasetype.md
+docs/models/shared/widgetbase.md
+docs/models/shared/schema.md
+docs/models/shared/saveentityfilefilesaccesscontrol.md
+docs/models/shared/saveentityfilefiless3ref.md
+docs/models/shared/saveentityfilefiles.md
+docs/models/shared/saveentityfile.md
+docs/models/shared/failedruleerrorrespfailedrule.md
+docs/models/shared/failedruleerrorresp.md
+docs/models/shared/createssouserrequest.md
+docs/models/shared/extraschemaattributes.md
+docs/models/shared/saveportalfilefiless3ref.md
+docs/models/shared/saveportalfilefiles.md
+docs/models/shared/saveportalfile.md
+docs/models/shared/upsertportalconfigcognitodetails.md
+docs/models/shared/upsertportalconfigdefaultusertonotify.md
+docs/models/shared/upsertportalconfigentityactionsactionlabel.md
+docs/models/shared/upsertportalconfigentityactions.md
+docs/models/shared/upsertportalconfigentityeditrulescadenceperiodtype.md
+docs/models/shared/upsertportalconfigentityeditrulesruletype.md
+docs/models/shared/upsertportalconfigentityeditrules.md
+docs/models/shared/upsertportalconfigentityidentifierstype.md
+docs/models/shared/upsertportalconfigentityidentifiers.md
+docs/models/shared/upsertportalconfigfeaturesettings.md
+docs/models/shared/upsertportalconfigimages.md
+docs/models/shared/upsertportalconfigselfregistrationsetting.md
+docs/models/shared/upsertportalconfig.md
+docs/models/shared/createuserrequest.md
+docs/models/shared/contactcountrequest.md
+docs/models/shared/security.md
+docs/sdks/epilot/README.md
+docs/sdks/activity/README.md
+docs/sdks/balance/README.md
+docs/sdks/ecp/README.md
+docs/sdks/ecpadmin/README.md
+docs/sdks/public/README.md
+.gitattributes
\ No newline at end of file
diff --git a/customer_portal/gen.yaml b/customer_portal/gen.yaml
index 20e406b96..62558981d 100644
--- a/customer_portal/gen.yaml
+++ b/customer_portal/gen.yaml
@@ -1,16 +1,28 @@
configVersion: 1.0.0
management:
- docChecksum: aebbe5e41777158f7dace2edf678a45a
+ docChecksum: 13bc0e62c6f3ba3e803220b4ae845dd1
docVersion: 1.0.0
- speakeasyVersion: 1.19.2
- generationVersion: 2.16.5
+ speakeasyVersion: 1.109.2
+ generationVersion: 2.173.0
generation:
- telemetryEnabled: false
+ repoURL: https://github.com/epilot-dev/sdk-python.git
sdkClassName: epilot
- sdkFlattening: true
singleTagPerOp: false
+ telemetryEnabled: false
+features:
+ python:
+ additionalProperties: 0.1.0
+ core: 3.3.1
+ deprecations: 2.81.1
+ globalSecurity: 2.82.0
+ globalServerURLs: 2.82.0
+ methodSecurity: 2.82.0
python:
- version: 1.2.2
+ version: 2.1.5
author: epilot
description: Python Client SDK for Epilot
+ flattenGlobalSecurity: false
+ installationURL: https://github.com/epilot-dev/sdk-python.git#subdirectory=customer_portal
+ maxMethodParams: 0
packageName: epilot-customer-portal
+ repoSubDirectory: customer_portal
diff --git a/customer_portal/pylintrc b/customer_portal/pylintrc
index 4b8a37281..a2f54e249 100755
--- a/customer_portal/pylintrc
+++ b/customer_portal/pylintrc
@@ -88,7 +88,7 @@ persistent=yes
# Minimum Python version to use for version dependent checks. Will default to
# the version used to run pylint.
-py-version=3.9
+py-version=3.8
# Discover python modules and packages in the file system subtree.
recursive=no
@@ -116,20 +116,15 @@ argument-naming-style=snake_case
#argument-rgx=
# Naming style matching correct attribute names.
-attr-naming-style=snake_case
+#attr-naming-style=snake_case
# Regular expression matching correct attribute names. Overrides attr-naming-
# style. If left empty, attribute names will be checked with the set naming
# style.
-#attr-rgx=
+attr-rgx=[^\W\d][^\W]*|__.*__$
# Bad variable names which should always be refused, separated by a comma.
-bad-names=foo,
- bar,
- baz,
- toto,
- tutu,
- tata
+bad-names=
# Bad variable names regexes, separated by a comma. If names match any regex,
# they will always be refused
@@ -441,7 +436,13 @@ disable=raw-checker-failed,
trailing-newlines,
too-many-public-methods,
too-many-locals,
- too-many-lines
+ too-many-lines,
+ using-constant-test,
+ too-many-statements,
+ cyclic-import,
+ too-many-nested-blocks,
+ too-many-boolean-expressions,
+ no-else-raise
# Enable the message, report, category or checker with the given id(s). You can
# either give multiple identifier separated by comma (,) or put this option
@@ -622,7 +623,7 @@ additional-builtins=
allow-global-unused-variables=yes
# List of names allowed to shadow builtins
-allowed-redefined-builtins=
+allowed-redefined-builtins=id,object
# List of strings which can identify a callback function by name. A callback
# name must start or end with one of those strings.
diff --git a/customer_portal/setup.py b/customer_portal/setup.py
index cf4e5535e..e2f79691e 100755
--- a/customer_portal/setup.py
+++ b/customer_portal/setup.py
@@ -10,30 +10,31 @@
setuptools.setup(
name="epilot-customer-portal",
- version="1.2.2",
+ version="2.1.5",
author="epilot",
description="Python Client SDK for Epilot",
long_description=long_description,
long_description_content_type="text/markdown",
packages=setuptools.find_packages(where="src"),
install_requires=[
- "certifi==2022.12.07",
- "charset-normalizer==2.1.1",
- "dataclasses-json-speakeasy==0.5.8",
- "idna==3.3",
- "marshmallow==3.17.1",
- "marshmallow-enum==1.5.1",
- "mypy-extensions==0.4.3",
- "packaging==21.3",
- "pyparsing==3.0.9",
- "python-dateutil==2.8.2",
- "requests==2.28.1",
- "six==1.16.0",
- "typing-inspect==0.8.0",
- "typing_extensions==4.3.0",
- "urllib3==1.26.12",
- "pylint==2.16.2",
+ "certifi>=2023.7.22",
+ "charset-normalizer>=3.2.0",
+ "dataclasses-json>=0.6.1",
+ "idna>=3.4",
+ "jsonpath-python>=1.0.6 ",
+ "marshmallow>=3.19.0",
+ "mypy-extensions>=1.0.0",
+ "packaging>=23.1",
+ "python-dateutil>=2.8.2",
+ "requests>=2.31.0",
+ "six>=1.16.0",
+ "typing-inspect>=0.9.0",
+ "typing_extensions>=4.7.1",
+ "urllib3>=2.0.4",
],
+ extras_require={
+ "dev":["pylint==2.16.2"]
+ },
package_dir={'': 'src'},
- python_requires='>=3.9'
+ python_requires='>=3.8'
)
diff --git a/customer_portal/src/epilot/__init__.py b/customer_portal/src/epilot/__init__.py
index b9e232018..e6c0deeb6 100755
--- a/customer_portal/src/epilot/__init__.py
+++ b/customer_portal/src/epilot/__init__.py
@@ -1,3 +1,4 @@
"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
from .sdk import *
+from .sdkconfiguration import *
diff --git a/customer_portal/src/epilot/activity.py b/customer_portal/src/epilot/activity.py
new file mode 100755
index 000000000..a404df179
--- /dev/null
+++ b/customer_portal/src/epilot/activity.py
@@ -0,0 +1,43 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from .sdkconfiguration import SDKConfiguration
+from epilot import utils
+from epilot.models import errors, operations
+from typing import Optional
+
+class Activity:
+ sdk_configuration: SDKConfiguration
+
+ def __init__(self, sdk_config: SDKConfiguration) -> None:
+ self.sdk_configuration = sdk_config
+
+
+ def get_entity_activity_feed(self, request: operations.GetEntityActivityFeedRequest) -> operations.GetEntityActivityFeedResponse:
+ r"""getEntityActivityFeed
+ Get activity feed for an entity
+ """
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
+
+ url = utils.generate_url(operations.GetEntityActivityFeedRequest, base_url, '/v2/portal/entity/{slug}/{id}/activity', request)
+ headers = {}
+ query_params = utils.get_query_params(operations.GetEntityActivityFeedRequest, request)
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
+
+ client = self.sdk_configuration.security_client
+
+ http_res = client.request('GET', url, params=query_params, headers=headers)
+ content_type = http_res.headers.get('Content-Type')
+
+ res = operations.GetEntityActivityFeedResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
+
+ if http_res.status_code == 200:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[operations.GetEntityActivityFeed200ApplicationJSON])
+ res.get_entity_activity_feed_200_application_json_object = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
+
+ return res
+
+
\ No newline at end of file
diff --git a/customer_portal/src/epilot/balance.py b/customer_portal/src/epilot/balance.py
new file mode 100755
index 000000000..861fab4c2
--- /dev/null
+++ b/customer_portal/src/epilot/balance.py
@@ -0,0 +1,42 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from .sdkconfiguration import SDKConfiguration
+from epilot import utils
+from epilot.models import errors, operations, shared
+from typing import Optional
+
+class Balance:
+ sdk_configuration: SDKConfiguration
+
+ def __init__(self, sdk_config: SDKConfiguration) -> None:
+ self.sdk_configuration = sdk_config
+
+
+ def get_customer_balance(self, request: operations.GetCustomerBalanceRequest, security: operations.GetCustomerBalanceSecurity) -> operations.GetCustomerBalanceResponse:
+ r"""getCustomerBalance
+ Get total balance across all contracts and orders of a customer entity.
+ """
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
+
+ url = utils.generate_url(operations.GetCustomerBalanceRequest, base_url, '/v2/portal/billing/customers/{customer_entity_id}/balance', request)
+ headers = {}
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
+
+ client = utils.configure_security_client(self.sdk_configuration.client, security)
+
+ http_res = client.request('GET', url, headers=headers)
+ content_type = http_res.headers.get('Content-Type')
+
+ res = operations.GetCustomerBalanceResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
+
+ if http_res.status_code == 200:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[shared.Balance])
+ res.balance = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
+
+ return res
+
+
\ No newline at end of file
diff --git a/customer_portal/src/epilot/ecp.py b/customer_portal/src/epilot/ecp.py
index f1e63f04a..0d29ed63c 100755
--- a/customer_portal/src/epilot/ecp.py
+++ b/customer_portal/src/epilot/ecp.py
@@ -1,39 +1,32 @@
"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
-import requests as requests_http
-from . import utils
-from epilot.models import operations, shared
-from typing import Any, Optional
+from .sdkconfiguration import SDKConfiguration
+from epilot import utils
+from epilot.models import errors, operations, shared
+from typing import Any, Dict, List, Optional, Union
class Ecp:
- r"""ECP"""
- _client: requests_http.Session
- _security_client: requests_http.Session
- _server_url: str
- _language: str
- _sdk_version: str
- _gen_version: str
-
- def __init__(self, client: requests_http.Session, security_client: requests_http.Session, server_url: str, language: str, sdk_version: str, gen_version: str) -> None:
- self._client = client
- self._security_client = security_client
- self._server_url = server_url
- self._language = language
- self._sdk_version = sdk_version
- self._gen_version = gen_version
+ r"""APIs defined for a portal user"""
+ sdk_configuration: SDKConfiguration
+
+ def __init__(self, sdk_config: SDKConfiguration) -> None:
+ self.sdk_configuration = sdk_config
+
def add_end_customer_relation_to_entity(self, request: operations.AddEndCustomerRelationToEntityRequest, security: operations.AddEndCustomerRelationToEntitySecurity) -> operations.AddEndCustomerRelationToEntityResponse:
r"""addEndCustomerRelationToEntity
- Add EndCustomer Relation To an Entity
+ Add portal user relation to an entity
"""
- base_url = self._server_url
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
url = utils.generate_url(operations.AddEndCustomerRelationToEntityRequest, base_url, '/v2/portal/entity/add-end-customer/{slug}/{id}', request)
+ headers = {}
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
+ client = utils.configure_security_client(self.sdk_configuration.client, security)
- client = utils.configure_security_client(self._client, security)
-
- http_res = client.request('PUT', url)
+ http_res = client.request('PUT', url, headers=headers)
content_type = http_res.headers.get('Content-Type')
res = operations.AddEndCustomerRelationToEntityResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
@@ -42,72 +35,144 @@ def add_end_customer_relation_to_entity(self, request: operations.AddEndCustomer
if utils.match_content_type(content_type, 'application/json'):
out = utils.unmarshal_json(http_res.text, Optional[operations.AddEndCustomerRelationToEntity200ApplicationJSON])
res.add_end_customer_relation_to_entity_200_application_json_object = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
+ elif http_res.status_code in [401, 403, 500]:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[shared.ErrorResp])
+ res.error_resp = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
+
+ return res
+
+
+ def create_custom_entity_activity(self, request: operations.CreateCustomEntityActivityRequest, security: operations.CreateCustomEntityActivitySecurity) -> operations.CreateCustomEntityActivityResponse:
+ r"""createCustomEntityActivity
+ Create a custom activity that can be displayed in activity feed of an entity.
+ """
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
+
+ url = base_url + '/v2/portal/entity/activity'
+ headers = {}
+ req_content_type, data, form = utils.serialize_request_body(request, "activity", False, True, 'json')
+ if req_content_type not in ('multipart/form-data', 'multipart/mixed'):
+ headers['content-type'] = req_content_type
+ query_params = utils.get_query_params(operations.CreateCustomEntityActivityRequest, request)
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
+
+ client = utils.configure_security_client(self.sdk_configuration.client, security)
+
+ http_res = client.request('PUT', url, params=query_params, data=data, files=form, headers=headers)
+ content_type = http_res.headers.get('Content-Type')
+
+ res = operations.CreateCustomEntityActivityResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
+
+ if http_res.status_code == 201:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[shared.ActivityItem])
+ res.activity_item = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
+ elif http_res.status_code in [401, 403, 500]:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[shared.ErrorResp])
+ res.error_resp = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
return res
+
def delete_entity_file(self, request: shared.DeleteEntityFile, security: operations.DeleteEntityFileSecurity) -> operations.DeleteEntityFileResponse:
- r"""Delete files from an entity
+ r"""deleteEntityFile
Delete files from an entity
"""
- base_url = self._server_url
-
- url = base_url.removesuffix('/') + '/v2/portal/entity/file'
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
+ url = base_url + '/v2/portal/entity/file'
headers = {}
- req_content_type, data, form = utils.serialize_request_body(request, "request", 'json')
+ req_content_type, data, form = utils.serialize_request_body(request, "request", False, False, 'json')
if req_content_type not in ('multipart/form-data', 'multipart/mixed'):
headers['content-type'] = req_content_type
if data is None and form is None:
raise Exception('request body is required')
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
- client = utils.configure_security_client(self._client, security)
+ client = utils.configure_security_client(self.sdk_configuration.client, security)
http_res = client.request('DELETE', url, data=data, files=form, headers=headers)
content_type = http_res.headers.get('Content-Type')
res = operations.DeleteEntityFileResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
- if http_res.status_code == 200:
+ if http_res.status_code == 202:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[operations.DeleteEntityFile202ApplicationJSON])
+ res.delete_entity_file_202_application_json_object = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
+ elif http_res.status_code in [400, 401, 403, 404, 500]:
if utils.match_content_type(content_type, 'application/json'):
- out = utils.unmarshal_json(http_res.text, Optional[operations.DeleteEntityFile200ApplicationJSON])
- res.delete_entity_file_200_application_json_object = out
+ out = utils.unmarshal_json(http_res.text, Optional[shared.ErrorResp])
+ res.error_resp = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
return res
+
def delete_portal_user(self, security: operations.DeletePortalUserSecurity) -> operations.DeletePortalUserResponse:
r"""deletePortalUser
- TODO
+ Delete the portal user
"""
- base_url = self._server_url
-
- url = base_url.removesuffix('/') + '/v2/portal/user'
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
+ url = base_url + '/v2/portal/user'
+ headers = {}
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
- client = utils.configure_security_client(self._client, security)
+ client = utils.configure_security_client(self.sdk_configuration.client, security)
- http_res = client.request('DELETE', url)
+ http_res = client.request('DELETE', url, headers=headers)
content_type = http_res.headers.get('Content-Type')
res = operations.DeletePortalUserResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
if http_res.status_code == 200:
if utils.match_content_type(content_type, 'application/json'):
- res.delete_portal_user_200_application_json_string = http_res.content
+ out = utils.unmarshal_json(http_res.text, Optional[operations.DeletePortalUser200ApplicationJSON])
+ res.delete_portal_user_200_application_json_object = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
+ elif http_res.status_code in [401, 500]:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[shared.ErrorResp])
+ res.error_resp = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
return res
- def get_all_contracts(self, security: operations.GetAllContractsSecurity) -> operations.GetAllContractsResponse:
+
+ def get_all_contracts(self, request: operations.GetAllContractsRequest, security: operations.GetAllContractsSecurity) -> operations.GetAllContractsResponse:
r"""getAllContracts
- TODO
+ Get all contracts for a portal user
"""
- base_url = self._server_url
-
- url = base_url.removesuffix('/') + '/v2/portal/contract'
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
+ url = base_url + '/v2/portal/contract'
+ headers = {}
+ query_params = utils.get_query_params(operations.GetAllContractsRequest, request)
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
- client = utils.configure_security_client(self._client, security)
+ client = utils.configure_security_client(self.sdk_configuration.client, security)
- http_res = client.request('GET', url)
+ http_res = client.request('GET', url, params=query_params, headers=headers)
content_type = http_res.headers.get('Content-Type')
res = operations.GetAllContractsResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
@@ -116,21 +181,68 @@ def get_all_contracts(self, security: operations.GetAllContractsSecurity) -> ope
if utils.match_content_type(content_type, 'application/json'):
out = utils.unmarshal_json(http_res.text, Optional[operations.GetAllContracts200ApplicationJSON])
res.get_all_contracts_200_application_json_object = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
+ elif http_res.status_code in [401, 403, 500]:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[shared.ErrorResp])
+ res.error_resp = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
return res
- def get_all_opportunities(self, security: operations.GetAllOpportunitiesSecurity) -> operations.GetAllOpportunitiesResponse:
- r"""getAllOpportunities
- TODO
+
+ def get_all_files(self, request: operations.GetAllFilesRequest, security: operations.GetAllFilesSecurity) -> operations.GetAllFilesResponse:
+ r"""getAllFiles
+ Fetch all documents under the related entities of a contact
"""
- base_url = self._server_url
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
- url = base_url.removesuffix('/') + '/v2/portal/opportunity'
+ url = base_url + '/v2/portal/user/files'
+ headers = {}
+ query_params = utils.get_query_params(operations.GetAllFilesRequest, request)
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
+
+ client = utils.configure_security_client(self.sdk_configuration.client, security)
+
+ http_res = client.request('GET', url, params=query_params, headers=headers)
+ content_type = http_res.headers.get('Content-Type')
+
+ res = operations.GetAllFilesResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
+
+ if http_res.status_code == 200:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[operations.GetAllFiles200ApplicationJSON])
+ res.get_all_files_200_application_json_object = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
+ elif http_res.status_code in [401, 403, 404, 500]:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[shared.ErrorResp])
+ res.error_resp = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
+
+ return res
+
+
+ def get_all_opportunities(self, request: operations.GetAllOpportunitiesRequest, security: operations.GetAllOpportunitiesSecurity) -> operations.GetAllOpportunitiesResponse:
+ r"""getAllOpportunities
+ Get all opportunities of a portal user
+ """
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
+ url = base_url + '/v2/portal/opportunity'
+ headers = {}
+ query_params = utils.get_query_params(operations.GetAllOpportunitiesRequest, request)
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
- client = utils.configure_security_client(self._client, security)
+ client = utils.configure_security_client(self.sdk_configuration.client, security)
- http_res = client.request('GET', url)
+ http_res = client.request('GET', url, params=query_params, headers=headers)
content_type = http_res.headers.get('Content-Type')
res = operations.GetAllOpportunitiesResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
@@ -139,21 +251,33 @@ def get_all_opportunities(self, security: operations.GetAllOpportunitiesSecurity
if utils.match_content_type(content_type, 'application/json'):
out = utils.unmarshal_json(http_res.text, Optional[operations.GetAllOpportunities200ApplicationJSON])
res.get_all_opportunities_200_application_json_object = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
+ elif http_res.status_code in [401, 403, 404, 500]:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[shared.ErrorResp])
+ res.error_resp = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
return res
- def get_all_orders(self, security: operations.GetAllOrdersSecurity) -> operations.GetAllOrdersResponse:
+
+ def get_all_orders(self, request: operations.GetAllOrdersRequest, security: operations.GetAllOrdersSecurity) -> operations.GetAllOrdersResponse:
r"""getAllOrders
- TODO
+ Get all orders for the portal user
"""
- base_url = self._server_url
-
- url = base_url.removesuffix('/') + '/v2/portal/order'
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
+ url = base_url + '/v2/portal/order'
+ headers = {}
+ query_params = utils.get_query_params(operations.GetAllOrdersRequest, request)
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
- client = utils.configure_security_client(self._client, security)
+ client = utils.configure_security_client(self.sdk_configuration.client, security)
- http_res = client.request('GET', url)
+ http_res = client.request('GET', url, params=query_params, headers=headers)
content_type = http_res.headers.get('Content-Type')
res = operations.GetAllOrdersResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
@@ -162,48 +286,95 @@ def get_all_orders(self, security: operations.GetAllOrdersSecurity) -> operation
if utils.match_content_type(content_type, 'application/json'):
out = utils.unmarshal_json(http_res.text, Optional[operations.GetAllOrders200ApplicationJSON])
res.get_all_orders_200_application_json_object = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
+ elif http_res.status_code in [401, 403, 500]:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[shared.ErrorResp])
+ res.error_resp = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
+
+ return res
+
+
+ def get_billing_events(self, request: operations.GetBillingEventsRequest, security: operations.GetBillingEventsSecurity) -> operations.GetBillingEventsResponse:
+ r"""getBillingEvents
+ Fetch billing events for a portal user
+ """
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
+
+ url = base_url + '/v2/portal/billing/events'
+ headers = {}
+ query_params = utils.get_query_params(operations.GetBillingEventsRequest, request)
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
+
+ client = utils.configure_security_client(self.sdk_configuration.client, security)
+
+ http_res = client.request('GET', url, params=query_params, headers=headers)
+ content_type = http_res.headers.get('Content-Type')
+
+ res = operations.GetBillingEventsResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
+
+ if http_res.status_code == 200:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[operations.GetBillingEvents200ApplicationJSON])
+ res.get_billing_events_200_application_json_object = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
return res
+
def get_contact(self, security: operations.GetContactSecurity) -> operations.GetContactResponse:
r"""getContact
- Get the Contact by id
+ Retrieves the contact by ID.
"""
- base_url = self._server_url
-
- url = base_url.removesuffix('/') + '/v2/portal/contact'
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
+ url = base_url + '/v2/portal/contact'
+ headers = {}
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
- client = utils.configure_security_client(self._client, security)
+ client = utils.configure_security_client(self.sdk_configuration.client, security)
- http_res = client.request('GET', url)
+ http_res = client.request('GET', url, headers=headers)
content_type = http_res.headers.get('Content-Type')
res = operations.GetContactResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
if http_res.status_code == 200:
if utils.match_content_type(content_type, 'application/json'):
- out = utils.unmarshal_json(http_res.text, Optional[dict[str, Any]])
- res.entity_item = out
- elif http_res.status_code == 500:
+ out = utils.unmarshal_json(http_res.text, Optional[operations.GetContact200ApplicationJSON])
+ res.get_contact_200_application_json_object = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
+ elif http_res.status_code in [401, 403, 404, 500]:
if utils.match_content_type(content_type, 'application/json'):
out = utils.unmarshal_json(http_res.text, Optional[shared.ErrorResp])
res.error_resp = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
return res
+
def get_contract(self, request: operations.GetContractRequest, security: operations.GetContractSecurity) -> operations.GetContractResponse:
- r"""get contract based on id
- TODO
+ r"""getContract
+ Get a contract by id
"""
- base_url = self._server_url
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
url = utils.generate_url(operations.GetContractRequest, base_url, '/v2/portal/contract/{id}', request)
+ headers = {}
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
+ client = utils.configure_security_client(self.sdk_configuration.client, security)
- client = utils.configure_security_client(self._client, security)
-
- http_res = client.request('GET', url)
+ http_res = client.request('GET', url, headers=headers)
content_type = http_res.headers.get('Content-Type')
res = operations.GetContractResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
@@ -212,25 +383,35 @@ def get_contract(self, request: operations.GetContractRequest, security: operati
if utils.match_content_type(content_type, 'application/json'):
out = utils.unmarshal_json(http_res.text, Optional[operations.GetContract200ApplicationJSON])
res.get_contract_200_application_json_object = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
+ elif http_res.status_code in [401, 403, 404, 500]:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[shared.ErrorResp])
+ res.error_resp = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
return res
+
def get_entities_by_identifiers(self, request: operations.GetEntitiesByIdentifiersRequest, security: operations.GetEntitiesByIdentifiersSecurity) -> operations.GetEntitiesByIdentifiersResponse:
r"""getEntitiesByIdentifiers
- Get Entities By Identifiers
+ Get entities by identifiers by portal user
"""
- base_url = self._server_url
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
url = utils.generate_url(operations.GetEntitiesByIdentifiersRequest, base_url, '/v2/portal/entity/by-identifiers/{slug}', request)
-
headers = {}
- req_content_type, data, form = utils.serialize_request_body(request, "request_body", 'json')
+ req_content_type, data, form = utils.serialize_request_body(request, "request_body", False, False, 'json')
if req_content_type not in ('multipart/form-data', 'multipart/mixed'):
headers['content-type'] = req_content_type
if data is None and form is None:
raise Exception('request body is required')
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
- client = utils.configure_security_client(self._client, security)
+ client = utils.configure_security_client(self.sdk_configuration.client, security)
http_res = client.request('POST', url, data=data, files=form, headers=headers)
content_type = http_res.headers.get('Content-Type')
@@ -241,21 +422,100 @@ def get_entities_by_identifiers(self, request: operations.GetEntitiesByIdentifie
if utils.match_content_type(content_type, 'application/json'):
out = utils.unmarshal_json(http_res.text, Optional[operations.GetEntitiesByIdentifiers200ApplicationJSON])
res.get_entities_by_identifiers_200_application_json_object = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
+ elif http_res.status_code in [400, 401, 403, 500]:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[shared.ErrorResp])
+ res.error_resp = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
+
+ return res
+
+
+ def get_file_by_id(self, request: operations.GetFileByIDRequest, security: operations.GetFileByIDSecurity) -> operations.GetFileByIDResponse:
+ r"""getFileById
+ Fetch a document with ID
+ """
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
+
+ url = utils.generate_url(operations.GetFileByIDRequest, base_url, '/v2/portal/user/file/{id}', request)
+ headers = {}
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
+
+ client = utils.configure_security_client(self.sdk_configuration.client, security)
+
+ http_res = client.request('GET', url, headers=headers)
+ content_type = http_res.headers.get('Content-Type')
+
+ res = operations.GetFileByIDResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
+
+ if http_res.status_code == 200:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[operations.GetFileByID200ApplicationJSON])
+ res.get_file_by_id_200_application_json_object = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
+ elif http_res.status_code in [401, 403, 404, 500]:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[shared.ErrorResp])
+ res.error_resp = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
return res
+
+ def get_files_count_by_entity(self, security: operations.GetFilesCountByEntitySecurity) -> operations.GetFilesCountByEntityResponse:
+ r"""getFileCountByEntity
+ Fetch file counts for all ECP user related entities
+ """
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
+
+ url = base_url + '/v2/portal/user/files/count-by-entity'
+ headers = {}
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
+
+ client = utils.configure_security_client(self.sdk_configuration.client, security)
+
+ http_res = client.request('GET', url, headers=headers)
+ content_type = http_res.headers.get('Content-Type')
+
+ res = operations.GetFilesCountByEntityResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
+
+ if http_res.status_code == 200:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[List[shared.EntityFileCount]])
+ res.entity_file_counts = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
+ elif http_res.status_code in [401, 403, 404, 500]:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[shared.ErrorResp])
+ res.error_resp = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
+
+ return res
+
+
def get_opportunity(self, request: operations.GetOpportunityRequest, security: operations.GetOpportunitySecurity) -> operations.GetOpportunityResponse:
r"""getOpportunity
- TODO
+ Get an opportunity by id
"""
- base_url = self._server_url
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
url = utils.generate_url(operations.GetOpportunityRequest, base_url, '/v2/portal/opportunities/{id}', request)
+ headers = {}
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
+ client = utils.configure_security_client(self.sdk_configuration.client, security)
- client = utils.configure_security_client(self._client, security)
-
- http_res = client.request('GET', url)
+ http_res = client.request('GET', url, headers=headers)
content_type = http_res.headers.get('Content-Type')
res = operations.GetOpportunityResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
@@ -264,21 +524,32 @@ def get_opportunity(self, request: operations.GetOpportunityRequest, security: o
if utils.match_content_type(content_type, 'application/json'):
out = utils.unmarshal_json(http_res.text, Optional[operations.GetOpportunity200ApplicationJSON])
res.get_opportunity_200_application_json_object = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
+ elif http_res.status_code in [401, 403, 404, 500]:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[shared.ErrorResp])
+ res.error_resp = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
return res
+
def get_order(self, request: operations.GetOrderRequest, security: operations.GetOrderSecurity) -> operations.GetOrderResponse:
r"""getOrder
- TODO
+ Get an order by id
"""
- base_url = self._server_url
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
url = utils.generate_url(operations.GetOrderRequest, base_url, '/v2/portal/order/{id}', request)
+ headers = {}
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
+ client = utils.configure_security_client(self.sdk_configuration.client, security)
- client = utils.configure_security_client(self._client, security)
-
- http_res = client.request('GET', url)
+ http_res = client.request('GET', url, headers=headers)
content_type = http_res.headers.get('Content-Type')
res = operations.GetOrderResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
@@ -287,45 +558,67 @@ def get_order(self, request: operations.GetOrderRequest, security: operations.Ge
if utils.match_content_type(content_type, 'application/json'):
out = utils.unmarshal_json(http_res.text, Optional[operations.GetOrder200ApplicationJSON])
res.get_order_200_application_json_object = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
+ elif http_res.status_code in [401, 403, 404, 500]:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[shared.ErrorResp])
+ res.error_resp = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
return res
+
def get_organization_settings(self, security: operations.GetOrganizationSettingsSecurity) -> operations.GetOrganizationSettingsResponse:
r"""getOrganizationSettings
- get organization settings
+ Retrieves the organization settings.
"""
- base_url = self._server_url
-
- url = base_url.removesuffix('/') + '/v2/portal/org/settings'
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
+ url = base_url + '/v2/portal/org/settings'
+ headers = {}
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
- client = utils.configure_security_client(self._client, security)
+ client = utils.configure_security_client(self.sdk_configuration.client, security)
- http_res = client.request('GET', url)
+ http_res = client.request('GET', url, headers=headers)
content_type = http_res.headers.get('Content-Type')
res = operations.GetOrganizationSettingsResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
if http_res.status_code == 200:
if utils.match_content_type(content_type, 'application/json'):
- out = utils.unmarshal_json(http_res.text, Optional[shared.OrganizationSettings])
- res.organization_settings = out
+ out = utils.unmarshal_json(http_res.text, Optional[operations.GetOrganizationSettings200ApplicationJSON])
+ res.get_organization_settings_200_application_json_object = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
+ elif http_res.status_code in [401, 500]:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[shared.ErrorResp])
+ res.error_resp = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
return res
+
def get_portal_config(self, request: operations.GetPortalConfigRequest, security: operations.GetPortalConfigSecurity) -> operations.GetPortalConfigResponse:
r"""getPortalConfig
- TODO
+ Retrieves the portal configuration.
"""
- base_url = self._server_url
-
- url = base_url.removesuffix('/') + '/v2/portal/config'
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
+ url = base_url + '/v2/portal/config'
+ headers = {}
query_params = utils.get_query_params(operations.GetPortalConfigRequest, request)
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
- client = utils.configure_security_client(self._client, security)
+ client = utils.configure_security_client(self.sdk_configuration.client, security)
- http_res = client.request('GET', url, params=query_params)
+ http_res = client.request('GET', url, params=query_params, headers=headers)
content_type = http_res.headers.get('Content-Type')
res = operations.GetPortalConfigResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
@@ -334,68 +627,101 @@ def get_portal_config(self, request: operations.GetPortalConfigRequest, security
if utils.match_content_type(content_type, 'application/json'):
out = utils.unmarshal_json(http_res.text, Optional[shared.PortalConfig])
res.portal_config = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
+ elif http_res.status_code in [401, 403, 500]:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[shared.ErrorResp])
+ res.error_resp = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
return res
- def get_portal_config_by_domain(self, request: operations.GetPortalConfigByDomainRequest) -> operations.GetPortalConfigByDomainResponse:
- r"""getPortalConfigByDomain
- TODO
+
+ def get_portal_user(self, security: operations.GetPortalUserSecurity) -> operations.GetPortalUserResponse:
+ r"""getPortalUser
+ Get the portal user details
"""
- base_url = self._server_url
-
- url = base_url.removesuffix('/') + '/v2/portal/public/config'
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
- query_params = utils.get_query_params(operations.GetPortalConfigByDomainRequest, request)
+ url = base_url + '/v2/portal/user'
+ headers = {}
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
- client = self._security_client
+ client = utils.configure_security_client(self.sdk_configuration.client, security)
- http_res = client.request('GET', url, params=query_params)
+ http_res = client.request('GET', url, headers=headers)
content_type = http_res.headers.get('Content-Type')
- res = operations.GetPortalConfigByDomainResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
+ res = operations.GetPortalUserResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
if http_res.status_code == 200:
if utils.match_content_type(content_type, 'application/json'):
- out = utils.unmarshal_json(http_res.text, Optional[shared.PortalConfig])
- res.portal_config = out
+ out = utils.unmarshal_json(http_res.text, Optional[operations.GetPortalUser200ApplicationJSON])
+ res.get_portal_user_200_application_json_object = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
+ elif http_res.status_code in [401, 500]:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[shared.ErrorResp])
+ res.error_resp = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
return res
- def get_portal_user(self, security: operations.GetPortalUserSecurity) -> operations.GetPortalUserResponse:
- r"""getPortalUser
- TODO
+
+ def get_portal_widgets(self, request: operations.GetPortalWidgetsRequest, security: operations.GetPortalWidgetsSecurity) -> operations.GetPortalWidgetsResponse:
+ r"""getPortalWidgets
+ Retrieves the widgets of a portal
"""
- base_url = self._server_url
-
- url = base_url.removesuffix('/') + '/v2/portal/user'
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
+ url = base_url + '/v2/portal/widgets'
+ headers = {}
+ query_params = utils.get_query_params(operations.GetPortalWidgetsRequest, request)
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
- client = utils.configure_security_client(self._client, security)
+ client = utils.configure_security_client(self.sdk_configuration.client, security)
- http_res = client.request('GET', url)
+ http_res = client.request('GET', url, params=query_params, headers=headers)
content_type = http_res.headers.get('Content-Type')
- res = operations.GetPortalUserResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
+ res = operations.GetPortalWidgetsResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
if http_res.status_code == 200:
if utils.match_content_type(content_type, 'application/json'):
- out = utils.unmarshal_json(http_res.text, Optional[dict[str, Any]])
- res.entity_item = out
+ out = utils.unmarshal_json(http_res.text, Optional[shared.UpsertPortalWidget])
+ res.upsert_portal_widget = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
+ elif http_res.status_code in [401, 403, 500]:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[shared.ErrorResp])
+ res.error_resp = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
return res
+
def get_schemas(self, security: operations.GetSchemasSecurity) -> operations.GetSchemasResponse:
r"""getSchemas
- TODO
+ Retrieves the schemas.
"""
- base_url = self._server_url
-
- url = base_url.removesuffix('/') + '/v2/portal/schemas'
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
+ url = base_url + '/v2/portal/schemas'
+ headers = {}
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
- client = utils.configure_security_client(self._client, security)
+ client = utils.configure_security_client(self.sdk_configuration.client, security)
- http_res = client.request('GET', url)
+ http_res = client.request('GET', url, headers=headers)
content_type = http_res.headers.get('Content-Type')
res = operations.GetSchemasResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
@@ -404,73 +730,135 @@ def get_schemas(self, security: operations.GetSchemasSecurity) -> operations.Get
if utils.match_content_type(content_type, 'application/json'):
out = utils.unmarshal_json(http_res.text, Optional[operations.GetSchemas200ApplicationJSON])
res.get_schemas_200_application_json_object = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
+ elif http_res.status_code in [401, 500]:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[shared.ErrorResp])
+ res.error_resp = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
return res
+
def save_entity_file(self, request: shared.SaveEntityFile, security: operations.SaveEntityFileSecurity) -> operations.SaveEntityFileResponse:
- r"""Add files to an entity
+ r"""saveEntityFile
Add files to an entity
"""
- base_url = self._server_url
-
- url = base_url.removesuffix('/') + '/v2/portal/entity/file'
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
+ url = base_url + '/v2/portal/entity/file'
headers = {}
- req_content_type, data, form = utils.serialize_request_body(request, "request", 'json')
+ req_content_type, data, form = utils.serialize_request_body(request, "request", False, False, 'json')
if req_content_type not in ('multipart/form-data', 'multipart/mixed'):
headers['content-type'] = req_content_type
if data is None and form is None:
raise Exception('request body is required')
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
- client = utils.configure_security_client(self._client, security)
+ client = utils.configure_security_client(self.sdk_configuration.client, security)
http_res = client.request('POST', url, data=data, files=form, headers=headers)
content_type = http_res.headers.get('Content-Type')
res = operations.SaveEntityFileResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
- if http_res.status_code == 200:
+ if http_res.status_code == 201:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[operations.SaveEntityFile201ApplicationJSON])
+ res.save_entity_file_201_application_json_object = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
+ elif http_res.status_code in [400, 401, 403, 404, 500]:
if utils.match_content_type(content_type, 'application/json'):
- out = utils.unmarshal_json(http_res.text, Optional[operations.SaveEntityFile200ApplicationJSON])
- res.save_entity_file_200_application_json_object = out
+ out = utils.unmarshal_json(http_res.text, Optional[shared.ErrorResp])
+ res.error_resp = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
return res
- def test_auth(self) -> operations.TestAuthResponse:
- r"""testAuth
- TODO
+
+ def track_file_downloaded(self, request: operations.TrackFileDownloadedRequest, security: operations.TrackFileDownloadedSecurity) -> operations.TrackFileDownloadedResponse:
+ r"""trackFileDownloaded
+ Track that user has downloaded a file
"""
- base_url = self._server_url
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
+
+ url = utils.generate_url(operations.TrackFileDownloadedRequest, base_url, '/v2/portal/user/file/{id}/downloaded', request)
+ headers = {}
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
- url = base_url.removesuffix('/') + '/v2/portal/auth'
+ client = utils.configure_security_client(self.sdk_configuration.client, security)
+ http_res = client.request('POST', url, headers=headers)
+ content_type = http_res.headers.get('Content-Type')
+
+ res = operations.TrackFileDownloadedResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
- client = self._security_client
+ if http_res.status_code == 200:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[operations.TrackFileDownloaded200ApplicationJSON])
+ res.track_file_downloaded_200_application_json_object = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
+ elif http_res.status_code in [401, 403, 404, 500]:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[shared.ErrorResp])
+ res.error_resp = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
+
+ return res
+
+
+ def trigger_entity_access(self, request: operations.TriggerEntityAccessRequest, security: operations.TriggerEntityAccessSecurity) -> operations.TriggerEntityAccessResponse:
+ r"""triggerEntityAccess
+ Trigger entity access event for a portal user
+ """
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
- http_res = client.request('GET', url)
+ url = base_url + '/v2/portal/entity/access'
+ headers = {}
+ query_params = utils.get_query_params(operations.TriggerEntityAccessRequest, request)
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
+
+ client = utils.configure_security_client(self.sdk_configuration.client, security)
+
+ http_res = client.request('POST', url, params=query_params, headers=headers)
content_type = http_res.headers.get('Content-Type')
- res = operations.TestAuthResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
+ res = operations.TriggerEntityAccessResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
if http_res.status_code == 200:
- pass
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[operations.TriggerEntityAccess200ApplicationJSON])
+ res.trigger_entity_access_200_application_json_object = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
return res
- def update_contact(self, request: dict[str, Any], security: operations.UpdateContactSecurity) -> operations.UpdateContactResponse:
+
+ def update_contact(self, request: Dict[str, Any], security: operations.UpdateContactSecurity) -> operations.UpdateContactResponse:
r"""updateContact
- Update the contact details
+ Updates the contact details.
"""
- base_url = self._server_url
-
- url = base_url.removesuffix('/') + '/v2/portal/contact'
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
+ url = base_url + '/v2/portal/contact'
headers = {}
- req_content_type, data, form = utils.serialize_request_body(request, "request", 'json')
+ req_content_type, data, form = utils.serialize_request_body(request, "request", False, True, 'json')
if req_content_type not in ('multipart/form-data', 'multipart/mixed'):
headers['content-type'] = req_content_type
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
- client = utils.configure_security_client(self._client, security)
+ client = utils.configure_security_client(self.sdk_configuration.client, security)
http_res = client.request('PATCH', url, data=data, files=form, headers=headers)
content_type = http_res.headers.get('Content-Type')
@@ -479,27 +867,43 @@ def update_contact(self, request: dict[str, Any], security: operations.UpdateCon
if http_res.status_code == 200:
if utils.match_content_type(content_type, 'application/json'):
- out = utils.unmarshal_json(http_res.text, Optional[dict[str, Any]])
- res.entity_item = out
+ out = utils.unmarshal_json(http_res.text, Optional[operations.UpdateContact200ApplicationJSON])
+ res.update_contact_200_application_json_object = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
+ elif http_res.status_code in [401, 404, 500]:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[shared.ErrorResp])
+ res.error_resp = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
+ elif http_res.status_code == 403:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[Union[shared.ErrorResp, shared.FailedRuleErrorResp]])
+ res.update_contact_403_application_json_one_of = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
return res
+
def update_contract(self, request: operations.UpdateContractRequest, security: operations.UpdateContractSecurity) -> operations.UpdateContractResponse:
- r"""Update contract based on id
- TODO
+ r"""updateContract
+ Update a contract by id
"""
- base_url = self._server_url
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
url = utils.generate_url(operations.UpdateContractRequest, base_url, '/v2/portal/contract/{id}', request)
-
headers = {}
- req_content_type, data, form = utils.serialize_request_body(request, "request_body", 'json')
+ req_content_type, data, form = utils.serialize_request_body(request, "request_body", False, False, 'json')
if req_content_type not in ('multipart/form-data', 'multipart/mixed'):
headers['content-type'] = req_content_type
if data is None and form is None:
raise Exception('request body is required')
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
- client = utils.configure_security_client(self._client, security)
+ client = utils.configure_security_client(self.sdk_configuration.client, security)
http_res = client.request('PATCH', url, data=data, files=form, headers=headers)
content_type = http_res.headers.get('Content-Type')
@@ -510,25 +914,41 @@ def update_contract(self, request: operations.UpdateContractRequest, security: o
if utils.match_content_type(content_type, 'application/json'):
out = utils.unmarshal_json(http_res.text, Optional[operations.UpdateContract200ApplicationJSON])
res.update_contract_200_application_json_object = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
+ elif http_res.status_code in [401, 404, 500]:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[shared.ErrorResp])
+ res.error_resp = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
+ elif http_res.status_code == 403:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[Union[shared.ErrorResp, shared.FailedRuleErrorResp]])
+ res.update_contract_403_application_json_one_of = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
return res
+
def update_opportunity(self, request: operations.UpdateOpportunityRequest, security: operations.UpdateOpportunitySecurity) -> operations.UpdateOpportunityResponse:
- r"""Update an opportunity based on id
- TODO
+ r"""updateOpportunity
+ Update an opportunity by id
"""
- base_url = self._server_url
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
url = utils.generate_url(operations.UpdateOpportunityRequest, base_url, '/v2/portal/opportunities/{id}', request)
-
headers = {}
- req_content_type, data, form = utils.serialize_request_body(request, "request_body", 'json')
+ req_content_type, data, form = utils.serialize_request_body(request, "request_body", False, False, 'json')
if req_content_type not in ('multipart/form-data', 'multipart/mixed'):
headers['content-type'] = req_content_type
if data is None and form is None:
raise Exception('request body is required')
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
- client = utils.configure_security_client(self._client, security)
+ client = utils.configure_security_client(self.sdk_configuration.client, security)
http_res = client.request('PATCH', url, data=data, files=form, headers=headers)
content_type = http_res.headers.get('Content-Type')
@@ -539,23 +959,33 @@ def update_opportunity(self, request: operations.UpdateOpportunityRequest, secur
if utils.match_content_type(content_type, 'application/json'):
out = utils.unmarshal_json(http_res.text, Optional[operations.UpdateOpportunity200ApplicationJSON])
res.update_opportunity_200_application_json_object = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
+ elif http_res.status_code in [401, 403, 404, 500]:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[shared.ErrorResp])
+ res.error_resp = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
return res
+
def update_order(self, request: operations.UpdateOrderRequest, security: operations.UpdateOrderSecurity) -> operations.UpdateOrderResponse:
r"""updateOrder
- Update the order details
+ Update an order by id
"""
- base_url = self._server_url
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
url = utils.generate_url(operations.UpdateOrderRequest, base_url, '/v2/portal/order/{id}', request)
-
headers = {}
- req_content_type, data, form = utils.serialize_request_body(request, "request_body", 'json')
+ req_content_type, data, form = utils.serialize_request_body(request, "request_body", False, True, 'json')
if req_content_type not in ('multipart/form-data', 'multipart/mixed'):
headers['content-type'] = req_content_type
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
- client = utils.configure_security_client(self._client, security)
+ client = utils.configure_security_client(self.sdk_configuration.client, security)
http_res = client.request('PATCH', url, data=data, files=form, headers=headers)
content_type = http_res.headers.get('Content-Type')
@@ -564,25 +994,35 @@ def update_order(self, request: operations.UpdateOrderRequest, security: operati
if http_res.status_code == 200:
if utils.match_content_type(content_type, 'application/json'):
- out = utils.unmarshal_json(http_res.text, Optional[dict[str, Any]])
- res.entity_item = out
+ out = utils.unmarshal_json(http_res.text, Optional[operations.UpdateOrder200ApplicationJSON])
+ res.update_order_200_application_json_object = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
+ elif http_res.status_code in [401, 403, 404, 500]:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[shared.ErrorResp])
+ res.error_resp = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
return res
- def update_portal_user(self, request: dict[str, Any], security: operations.UpdatePortalUserSecurity) -> operations.UpdatePortalUserResponse:
+
+ def update_portal_user(self, request: Dict[str, Any], security: operations.UpdatePortalUserSecurity) -> operations.UpdatePortalUserResponse:
r"""updatePortalUser
Update the portal user details
"""
- base_url = self._server_url
-
- url = base_url.removesuffix('/') + '/v2/portal/user'
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
+ url = base_url + '/v2/portal/user'
headers = {}
- req_content_type, data, form = utils.serialize_request_body(request, "request", 'json')
+ req_content_type, data, form = utils.serialize_request_body(request, "request", False, True, 'json')
if req_content_type not in ('multipart/form-data', 'multipart/mixed'):
headers['content-type'] = req_content_type
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
- client = utils.configure_security_client(self._client, security)
+ client = utils.configure_security_client(self.sdk_configuration.client, security)
http_res = client.request('PATCH', url, data=data, files=form, headers=headers)
content_type = http_res.headers.get('Content-Type')
@@ -591,8 +1031,16 @@ def update_portal_user(self, request: dict[str, Any], security: operations.Updat
if http_res.status_code == 200:
if utils.match_content_type(content_type, 'application/json'):
- out = utils.unmarshal_json(http_res.text, Optional[dict[str, Any]])
- res.entity_item = out
+ out = utils.unmarshal_json(http_res.text, Optional[operations.UpdatePortalUser200ApplicationJSON])
+ res.update_portal_user_200_application_json_object = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
+ elif http_res.status_code in [401, 500]:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[shared.ErrorResp])
+ res.error_resp = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
return res
diff --git a/customer_portal/src/epilot/ecp_admin.py b/customer_portal/src/epilot/ecp_admin.py
index ef0f3f399..b17ddf1a1 100755
--- a/customer_portal/src/epilot/ecp_admin.py
+++ b/customer_portal/src/epilot/ecp_admin.py
@@ -1,40 +1,33 @@
"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
-import requests as requests_http
-from . import utils
-from epilot.models import operations, shared
-from typing import Any, Optional
+from .sdkconfiguration import SDKConfiguration
+from epilot import utils
+from epilot.models import errors, operations, shared
+from typing import Optional
class ECPAdmin:
- r"""ECP Admin"""
- _client: requests_http.Session
- _security_client: requests_http.Session
- _server_url: str
- _language: str
- _sdk_version: str
- _gen_version: str
-
- def __init__(self, client: requests_http.Session, security_client: requests_http.Session, server_url: str, language: str, sdk_version: str, gen_version: str) -> None:
- self._client = client
- self._security_client = security_client
- self._server_url = server_url
- self._language = language
- self._sdk_version = sdk_version
- self._gen_version = gen_version
+ r"""APIs defined for a ECP Admin"""
+ sdk_configuration: SDKConfiguration
+
+ def __init__(self, sdk_config: SDKConfiguration) -> None:
+ self.sdk_configuration = sdk_config
+
def configure_distribution(self, request: operations.ConfigureDistributionRequest, security: operations.ConfigureDistributionSecurity) -> operations.ConfigureDistributionResponse:
r"""configureDistribution
- TODO
+ Configure the distribution for the portal's custom domain
"""
- base_url = self._server_url
-
- url = base_url.removesuffix('/') + '/v2/portal/configure-distribution'
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
+ url = base_url + '/v2/portal/configure-distribution'
+ headers = {}
query_params = utils.get_query_params(operations.ConfigureDistributionRequest, request)
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
- client = utils.configure_security_client(self._client, security)
+ client = utils.configure_security_client(self.sdk_configuration.client, security)
- http_res = client.request('GET', url, params=query_params)
+ http_res = client.request('GET', url, params=query_params, headers=headers)
content_type = http_res.headers.get('Content-Type')
res = operations.ConfigureDistributionResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
@@ -43,43 +36,103 @@ def configure_distribution(self, request: operations.ConfigureDistributionReques
if utils.match_content_type(content_type, 'application/json'):
out = utils.unmarshal_json(http_res.text, Optional[operations.ConfigureDistribution200ApplicationJSON])
res.configure_distribution_200_application_json_object = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
+ elif http_res.status_code in [401, 403, 500]:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[shared.ErrorResp])
+ res.error_resp = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
return res
+
+ def create_sso_user(self, request: operations.CreateSSOUserRequest, security: operations.CreateSSOUserSecurity) -> operations.CreateSSOUserResponse:
+ r"""createSSOUser
+ Creates a portal user as an SSO user.
+ """
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
+
+ url = base_url + '/v2/portal/sso/user'
+ headers = {}
+ req_content_type, data, form = utils.serialize_request_body(request, "create_sso_user_request", False, False, 'json')
+ if req_content_type not in ('multipart/form-data', 'multipart/mixed'):
+ headers['content-type'] = req_content_type
+ if data is None and form is None:
+ raise Exception('request body is required')
+ query_params = utils.get_query_params(operations.CreateSSOUserRequest, request)
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
+
+ client = utils.configure_security_client(self.sdk_configuration.client, security)
+
+ http_res = client.request('POST', url, params=query_params, data=data, files=form, headers=headers)
+ content_type = http_res.headers.get('Content-Type')
+
+ res = operations.CreateSSOUserResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
+
+ if http_res.status_code == 201:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[operations.CreateSSOUser201ApplicationJSON])
+ res.create_sso_user_201_application_json_object = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
+ elif http_res.status_code in [400, 401, 500]:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[shared.ErrorResp])
+ res.error_resp = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
+
+ return res
+
+
def delete_portal(self, request: operations.DeletePortalRequest, security: operations.DeletePortalSecurity) -> operations.DeletePortalResponse:
r"""deletePortal
- TODO
+ Deletes the portal.
"""
- base_url = self._server_url
-
- url = base_url.removesuffix('/') + '/v2/portal/config'
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
+ url = base_url + '/v2/portal/config'
+ headers = {}
query_params = utils.get_query_params(operations.DeletePortalRequest, request)
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
- client = utils.configure_security_client(self._client, security)
+ client = utils.configure_security_client(self.sdk_configuration.client, security)
- http_res = client.request('DELETE', url, params=query_params)
+ http_res = client.request('DELETE', url, params=query_params, headers=headers)
content_type = http_res.headers.get('Content-Type')
res = operations.DeletePortalResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
- if http_res.status_code in [204, 403]:
+ if http_res.status_code == 204:
pass
+ elif http_res.status_code in [401, 403, 500]:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[shared.ErrorResp])
+ res.error_resp = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
return res
+
def extra_permission_attributes(self, security: operations.ExtraPermissionAttributesSecurity) -> operations.ExtraPermissionAttributesResponse:
r"""extraPermissionAttributes
- TODO
+ Retrieves the extra permission attributes.
"""
- base_url = self._server_url
-
- url = base_url.removesuffix('/') + '/v2/portal/extra-permission-attributes'
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
+ url = base_url + '/v2/portal/extra-permission-attributes'
+ headers = {}
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
- client = utils.configure_security_client(self._client, security)
+ client = utils.configure_security_client(self.sdk_configuration.client, security)
- http_res = client.request('GET', url)
+ http_res = client.request('GET', url, headers=headers)
content_type = http_res.headers.get('Content-Type')
res = operations.ExtraPermissionAttributesResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
@@ -88,21 +141,67 @@ def extra_permission_attributes(self, security: operations.ExtraPermissionAttrib
if utils.match_content_type(content_type, 'application/json'):
out = utils.unmarshal_json(http_res.text, Optional[operations.ExtraPermissionAttributes200ApplicationJSON])
res.extra_permission_attributes_200_application_json_object = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
+ elif http_res.status_code == 500:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[shared.ErrorResp])
+ res.error_resp = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
return res
+
+ def fetch_portal_users_by_related_entity(self, request: operations.FetchPortalUsersByRelatedEntityRequest, security: operations.FetchPortalUsersByRelatedEntitySecurity) -> operations.FetchPortalUsersByRelatedEntityResponse:
+ r"""fetchPortalUsersByRelatedEntity
+ Get all users for a given entity
+ """
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
+
+ url = base_url + '/v2/porta/users/by-related-entity'
+ headers = {}
+ query_params = utils.get_query_params(operations.FetchPortalUsersByRelatedEntityRequest, request)
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
+
+ client = utils.configure_security_client(self.sdk_configuration.client, security)
+
+ http_res = client.request('GET', url, params=query_params, headers=headers)
+ content_type = http_res.headers.get('Content-Type')
+
+ res = operations.FetchPortalUsersByRelatedEntityResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
+
+ if http_res.status_code == 200:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[operations.FetchPortalUsersByRelatedEntity200ApplicationJSON])
+ res.fetch_portal_users_by_related_entity_200_application_json_object = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
+ elif http_res.status_code in [401, 403, 500]:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[shared.ErrorResp])
+ res.error_resp = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
+
+ return res
+
+
def get_all_portal_configs(self, security: operations.GetAllPortalConfigsSecurity) -> operations.GetAllPortalConfigsResponse:
r"""getAllPortalConfigs
- TODO
+ Retrieves all portal configurations.
"""
- base_url = self._server_url
-
- url = base_url.removesuffix('/') + '/v2/portal/configs'
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
+ url = base_url + '/v2/portal/configs'
+ headers = {}
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
- client = utils.configure_security_client(self._client, security)
+ client = utils.configure_security_client(self.sdk_configuration.client, security)
- http_res = client.request('GET', url)
+ http_res = client.request('GET', url, headers=headers)
content_type = http_res.headers.get('Content-Type')
res = operations.GetAllPortalConfigsResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
@@ -111,50 +210,68 @@ def get_all_portal_configs(self, security: operations.GetAllPortalConfigsSecurit
if utils.match_content_type(content_type, 'application/json'):
out = utils.unmarshal_json(http_res.text, Optional[operations.GetAllPortalConfigs200ApplicationJSON])
res.get_all_portal_configs_200_application_json_object = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
+ elif http_res.status_code in [401, 403, 500]:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[shared.ErrorResp])
+ res.error_resp = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
return res
+
def get_ecp_contact(self, request: operations.GetECPContactRequest, security: operations.GetECPContactSecurity) -> operations.GetECPContactResponse:
r"""getECPContact
Get the Contact by id
"""
- base_url = self._server_url
-
- url = base_url.removesuffix('/') + '/v2/portal/ecp/contact'
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
+ url = base_url + '/v2/portal/ecp/contact'
+ headers = {}
query_params = utils.get_query_params(operations.GetECPContactRequest, request)
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
- client = utils.configure_security_client(self._client, security)
+ client = utils.configure_security_client(self.sdk_configuration.client, security)
- http_res = client.request('GET', url, params=query_params)
+ http_res = client.request('GET', url, params=query_params, headers=headers)
content_type = http_res.headers.get('Content-Type')
res = operations.GetECPContactResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
if http_res.status_code == 200:
if utils.match_content_type(content_type, 'application/json'):
- out = utils.unmarshal_json(http_res.text, Optional[dict[str, Any]])
- res.entity_item = out
- elif http_res.status_code == 500:
+ out = utils.unmarshal_json(http_res.text, Optional[operations.GetECPContact200ApplicationJSON])
+ res.get_ecp_contact_200_application_json_object = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
+ elif http_res.status_code in [401, 403, 404, 500]:
if utils.match_content_type(content_type, 'application/json'):
out = utils.unmarshal_json(http_res.text, Optional[shared.ErrorResp])
res.error_resp = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
return res
+
def get_email_templates(self, request: operations.GetEmailTemplatesRequest, security: operations.GetEmailTemplatesSecurity) -> operations.GetEmailTemplatesResponse:
r"""getEmailTemplates
- TODO
+ Retrieves the email templates of a portal
"""
- base_url = self._server_url
-
- url = base_url.removesuffix('/') + '/v2/portal/email-templates'
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
+ url = base_url + '/v2/portal/email-templates'
+ headers = {}
query_params = utils.get_query_params(operations.GetEmailTemplatesRequest, request)
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
- client = utils.configure_security_client(self._client, security)
+ client = utils.configure_security_client(self.sdk_configuration.client, security)
- http_res = client.request('GET', url, params=query_params)
+ http_res = client.request('GET', url, params=query_params, headers=headers)
content_type = http_res.headers.get('Content-Type')
res = operations.GetEmailTemplatesResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
@@ -163,21 +280,32 @@ def get_email_templates(self, request: operations.GetEmailTemplatesRequest, secu
if utils.match_content_type(content_type, 'application/json'):
out = utils.unmarshal_json(http_res.text, Optional[shared.EmailTemplates])
res.email_templates = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
+ elif http_res.status_code in [401, 403, 500]:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[shared.ErrorResp])
+ res.error_resp = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
return res
+
def get_entity_identifiers(self, request: operations.GetEntityIdentifiersRequest, security: operations.GetEntityIdentifiersSecurity) -> operations.GetEntityIdentifiersResponse:
r"""getEntityIdentifiers
- Get Entity's Identifiers
+ Retrieve a list of entity identifiers used for entity search by portal users.
"""
- base_url = self._server_url
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
url = utils.generate_url(operations.GetEntityIdentifiersRequest, base_url, '/v2/portal/entity/identifiers/{slug}', request)
+ headers = {}
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
+ client = utils.configure_security_client(self.sdk_configuration.client, security)
- client = utils.configure_security_client(self._client, security)
-
- http_res = client.request('GET', url)
+ http_res = client.request('GET', url, headers=headers)
content_type = http_res.headers.get('Content-Type')
res = operations.GetEntityIdentifiersResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
@@ -186,22 +314,33 @@ def get_entity_identifiers(self, request: operations.GetEntityIdentifiersRequest
if utils.match_content_type(content_type, 'application/json'):
out = utils.unmarshal_json(http_res.text, Optional[operations.GetEntityIdentifiers200ApplicationJSON])
res.get_entity_identifiers_200_application_json_object = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
+ elif http_res.status_code in [401, 403, 500]:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[shared.ErrorResp])
+ res.error_resp = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
return res
+
def get_org_portal_config(self, request: operations.GetOrgPortalConfigRequest, security: operations.GetOrgPortalConfigSecurity) -> operations.GetOrgPortalConfigResponse:
r"""getOrgPortalConfig
- TODO
+ Retrieves the portal configuration for the organization.
"""
- base_url = self._server_url
-
- url = base_url.removesuffix('/') + '/v2/portal/org/portal/config'
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
+ url = base_url + '/v2/portal/org/portal/config'
+ headers = {}
query_params = utils.get_query_params(operations.GetOrgPortalConfigRequest, request)
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
- client = utils.configure_security_client(self._client, security)
+ client = utils.configure_security_client(self.sdk_configuration.client, security)
- http_res = client.request('GET', url, params=query_params)
+ http_res = client.request('GET', url, params=query_params, headers=headers)
content_type = http_res.headers.get('Content-Type')
res = operations.GetOrgPortalConfigResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
@@ -210,22 +349,33 @@ def get_org_portal_config(self, request: operations.GetOrgPortalConfigRequest, s
if utils.match_content_type(content_type, 'application/json'):
out = utils.unmarshal_json(http_res.text, Optional[shared.PortalConfig])
res.portal_config = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
+ elif http_res.status_code in [401, 403, 500]:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[shared.ErrorResp])
+ res.error_resp = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
return res
+
def get_portal_config(self, request: operations.GetPortalConfigRequest, security: operations.GetPortalConfigSecurity) -> operations.GetPortalConfigResponse:
r"""getPortalConfig
- TODO
+ Retrieves the portal configuration.
"""
- base_url = self._server_url
-
- url = base_url.removesuffix('/') + '/v2/portal/config'
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
+ url = base_url + '/v2/portal/config'
+ headers = {}
query_params = utils.get_query_params(operations.GetPortalConfigRequest, request)
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
- client = utils.configure_security_client(self._client, security)
+ client = utils.configure_security_client(self.sdk_configuration.client, security)
- http_res = client.request('GET', url, params=query_params)
+ http_res = client.request('GET', url, params=query_params, headers=headers)
content_type = http_res.headers.get('Content-Type')
res = operations.GetPortalConfigResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
@@ -234,45 +384,67 @@ def get_portal_config(self, request: operations.GetPortalConfigRequest, security
if utils.match_content_type(content_type, 'application/json'):
out = utils.unmarshal_json(http_res.text, Optional[shared.PortalConfig])
res.portal_config = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
+ elif http_res.status_code in [401, 403, 500]:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[shared.ErrorResp])
+ res.error_resp = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
return res
- def get_public_portal_config(self, request: operations.GetPublicPortalConfigRequest) -> operations.GetPublicPortalConfigResponse:
- r"""getPublicPortalConfig
- TODO
+
+ def get_portal_widgets(self, request: operations.GetPortalWidgetsRequest, security: operations.GetPortalWidgetsSecurity) -> operations.GetPortalWidgetsResponse:
+ r"""getPortalWidgets
+ Retrieves the widgets of a portal
"""
- base_url = self._server_url
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
- url = base_url.removesuffix('/') + '/v2/portal/public/portal/config'
-
- query_params = utils.get_query_params(operations.GetPublicPortalConfigRequest, request)
+ url = base_url + '/v2/portal/widgets'
+ headers = {}
+ query_params = utils.get_query_params(operations.GetPortalWidgetsRequest, request)
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
- client = self._security_client
+ client = utils.configure_security_client(self.sdk_configuration.client, security)
- http_res = client.request('GET', url, params=query_params)
+ http_res = client.request('GET', url, params=query_params, headers=headers)
content_type = http_res.headers.get('Content-Type')
- res = operations.GetPublicPortalConfigResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
+ res = operations.GetPortalWidgetsResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
if http_res.status_code == 200:
if utils.match_content_type(content_type, 'application/json'):
- out = utils.unmarshal_json(http_res.text, Optional[shared.PortalConfig])
- res.portal_config = out
+ out = utils.unmarshal_json(http_res.text, Optional[shared.UpsertPortalWidget])
+ res.upsert_portal_widget = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
+ elif http_res.status_code in [401, 403, 500]:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[shared.ErrorResp])
+ res.error_resp = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
return res
+
def get_valid_secondary_attributes(self, security: operations.GetValidSecondaryAttributesSecurity) -> operations.GetValidSecondaryAttributesResponse:
r"""getValidSecondaryAttributes
- Get Valid Secondary Attributes
+ Get valid secondary attributes that are used while mapping a contact on registration
"""
- base_url = self._server_url
-
- url = base_url.removesuffix('/') + '/v2/portal/contact/valid/secondary/attributes'
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
+ url = base_url + '/v2/portal/contact/valid/secondary/attributes'
+ headers = {}
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
- client = utils.configure_security_client(self._client, security)
+ client = utils.configure_security_client(self.sdk_configuration.client, security)
- http_res = client.request('GET', url)
+ http_res = client.request('GET', url, headers=headers)
content_type = http_res.headers.get('Content-Type')
res = operations.GetValidSecondaryAttributesResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
@@ -281,28 +453,72 @@ def get_valid_secondary_attributes(self, security: operations.GetValidSecondaryA
if utils.match_content_type(content_type, 'application/json'):
out = utils.unmarshal_json(http_res.text, Optional[operations.GetValidSecondaryAttributes200ApplicationJSON])
res.get_valid_secondary_attributes_200_application_json_object = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
+ elif http_res.status_code in [401, 403, 500]:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[shared.ErrorResp])
+ res.error_resp = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
return res
- def replace_ecp_template_variables(self, request: operations.ReplaceECPTemplateVariablesRequest, security: operations.ReplaceECPTemplateVariablesSecurity) -> operations.ReplaceECPTemplateVariablesResponse:
- r"""replaceECPTemplateVariables
- TODO
+
+ def login_to_portal_as_user(self, request: operations.LoginToPortalAsUserRequestBody, security: operations.LoginToPortalAsUserSecurity) -> operations.LoginToPortalAsUserResponse:
+ r"""loginToPortalAsUser
+ Generate a token to log in to a portal impersonating a users.
+
+ Token is valid for 5 minutes.
"""
- base_url = self._server_url
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
- url = base_url.removesuffix('/') + '/v2/portal/replace-ecp-template-variables'
+ url = base_url + '/v2/portal/admin:login-as-user'
+ headers = {}
+ req_content_type, data, form = utils.serialize_request_body(request, "request", False, False, 'json')
+ if req_content_type not in ('multipart/form-data', 'multipart/mixed'):
+ headers['content-type'] = req_content_type
+ if data is None and form is None:
+ raise Exception('request body is required')
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
+
+ client = utils.configure_security_client(self.sdk_configuration.client, security)
+ http_res = client.request('POST', url, data=data, files=form, headers=headers)
+ content_type = http_res.headers.get('Content-Type')
+
+ res = operations.LoginToPortalAsUserResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
+
+ if http_res.status_code == 200:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[operations.LoginToPortalAsUser200ApplicationJSON])
+ res.login_to_portal_as_user_200_application_json_object = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
+
+ return res
+
+
+ def replace_ecp_template_variables(self, request: operations.ReplaceECPTemplateVariablesRequestBody, security: operations.ReplaceECPTemplateVariablesSecurity) -> operations.ReplaceECPTemplateVariablesResponse:
+ r"""replaceECPTemplateVariables
+ Replaces the template variables of a portal
+ """
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
+
+ url = base_url + '/v2/portal/replace-ecp-template-variables'
headers = {}
- req_content_type, data, form = utils.serialize_request_body(request, "request_body", 'json')
+ req_content_type, data, form = utils.serialize_request_body(request, "request", False, False, 'json')
if req_content_type not in ('multipart/form-data', 'multipart/mixed'):
headers['content-type'] = req_content_type
if data is None and form is None:
raise Exception('request body is required')
- query_params = utils.get_query_params(operations.ReplaceECPTemplateVariablesRequest, request)
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
- client = utils.configure_security_client(self._client, security)
+ client = utils.configure_security_client(self.sdk_configuration.client, security)
- http_res = client.request('POST', url, params=query_params, data=data, files=form, headers=headers)
+ http_res = client.request('POST', url, data=data, files=form, headers=headers)
content_type = http_res.headers.get('Content-Type')
res = operations.ReplaceECPTemplateVariablesResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
@@ -311,55 +527,75 @@ def replace_ecp_template_variables(self, request: operations.ReplaceECPTemplateV
if utils.match_content_type(content_type, 'application/json'):
out = utils.unmarshal_json(http_res.text, Optional[operations.ReplaceECPTemplateVariables200ApplicationJSON])
res.replace_ecp_template_variables_200_application_json_object = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
+ elif http_res.status_code in [401, 500]:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[shared.ErrorResp])
+ res.error_resp = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
return res
+
def save_portal_files(self, request: shared.SavePortalFile, security: operations.SavePortalFilesSecurity) -> operations.SavePortalFilesResponse:
- r"""Add files to portal
+ r"""savePortalFiles
Add files to portal
"""
- base_url = self._server_url
-
- url = base_url.removesuffix('/') + '/v2/portal/portal/files'
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
+ url = base_url + '/v2/portal/portal/files'
headers = {}
- req_content_type, data, form = utils.serialize_request_body(request, "request", 'json')
+ req_content_type, data, form = utils.serialize_request_body(request, "request", False, False, 'json')
if req_content_type not in ('multipart/form-data', 'multipart/mixed'):
headers['content-type'] = req_content_type
if data is None and form is None:
raise Exception('request body is required')
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
- client = utils.configure_security_client(self._client, security)
+ client = utils.configure_security_client(self.sdk_configuration.client, security)
http_res = client.request('POST', url, data=data, files=form, headers=headers)
content_type = http_res.headers.get('Content-Type')
res = operations.SavePortalFilesResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
- if http_res.status_code == 200:
+ if http_res.status_code == 201:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[operations.SavePortalFiles201ApplicationJSON])
+ res.save_portal_files_201_application_json_object = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
+ elif http_res.status_code in [400, 401, 403, 404, 500]:
if utils.match_content_type(content_type, 'application/json'):
- out = utils.unmarshal_json(http_res.text, Optional[dict[str, Any]])
- res.entity_item = out
+ out = utils.unmarshal_json(http_res.text, Optional[shared.ErrorResp])
+ res.error_resp = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
return res
+
def upsert_email_templates(self, request: operations.UpsertEmailTemplatesRequest, security: operations.UpsertEmailTemplatesSecurity) -> operations.UpsertEmailTemplatesResponse:
r"""upsertEmailTemplates
- TODO
+ Upserts the email templates of a portal
"""
- base_url = self._server_url
-
- url = base_url.removesuffix('/') + '/v2/portal/email-templates'
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
+ url = base_url + '/v2/portal/email-templates'
headers = {}
- req_content_type, data, form = utils.serialize_request_body(request, "email_templates", 'json')
+ req_content_type, data, form = utils.serialize_request_body(request, "email_templates", False, False, 'json')
if req_content_type not in ('multipart/form-data', 'multipart/mixed'):
headers['content-type'] = req_content_type
if data is None and form is None:
raise Exception('request body is required')
query_params = utils.get_query_params(operations.UpsertEmailTemplatesRequest, request)
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
- client = utils.configure_security_client(self._client, security)
+ client = utils.configure_security_client(self.sdk_configuration.client, security)
http_res = client.request('POST', url, params=query_params, data=data, files=form, headers=headers)
content_type = http_res.headers.get('Content-Type')
@@ -370,26 +606,36 @@ def upsert_email_templates(self, request: operations.UpsertEmailTemplatesRequest
if utils.match_content_type(content_type, 'application/json'):
out = utils.unmarshal_json(http_res.text, Optional[operations.UpsertEmailTemplates200ApplicationJSON])
res.upsert_email_templates_200_application_json_object = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
+ elif http_res.status_code in [401, 403, 500]:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[shared.ErrorResp])
+ res.error_resp = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
return res
+
def upsert_portal(self, request: operations.UpsertPortalRequest, security: operations.UpsertPortalSecurity) -> operations.UpsertPortalResponse:
- r"""upserts a portal
- upserts a portal and db item
+ r"""upsertPortal
+ Upserts the settings for a portal of an organization.
"""
- base_url = self._server_url
-
- url = base_url.removesuffix('/') + '/v2/portal/portal'
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
+ url = base_url + '/v2/portal/portal'
headers = {}
- req_content_type, data, form = utils.serialize_request_body(request, "upsert_portal_config", 'json')
+ req_content_type, data, form = utils.serialize_request_body(request, "upsert_portal_config", False, False, 'json')
if req_content_type not in ('multipart/form-data', 'multipart/mixed'):
headers['content-type'] = req_content_type
if data is None and form is None:
raise Exception('request body is required')
query_params = utils.get_query_params(operations.UpsertPortalRequest, request)
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
- client = utils.configure_security_client(self._client, security)
+ client = utils.configure_security_client(self.sdk_configuration.client, security)
http_res = client.request('POST', url, params=query_params, data=data, files=form, headers=headers)
content_type = http_res.headers.get('Content-Type')
@@ -398,12 +644,56 @@ def upsert_portal(self, request: operations.UpsertPortalRequest, security: opera
if http_res.status_code == 201:
if utils.match_content_type(content_type, 'application/json'):
- out = utils.unmarshal_json(http_res.text, Optional[shared.AddPortalResp])
- res.add_portal_resp = out
- elif http_res.status_code in [400, 401, 500]:
+ out = utils.unmarshal_json(http_res.text, Optional[shared.PortalConfig])
+ res.portal_config = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
+ elif http_res.status_code in [400, 401, 403, 500]:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[shared.ErrorResp])
+ res.error_resp = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
+
+ return res
+
+
+ def upsert_portal_widget(self, request: operations.UpsertPortalWidgetRequest, security: operations.UpsertPortalWidgetSecurity) -> operations.UpsertPortalWidgetResponse:
+ r"""upsertPortalWidget
+ Upsert widget for a portal of an organization.
+ """
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
+
+ url = base_url + '/v2/portal/widgets'
+ headers = {}
+ req_content_type, data, form = utils.serialize_request_body(request, "upsert_portal_widget", False, False, 'json')
+ if req_content_type not in ('multipart/form-data', 'multipart/mixed'):
+ headers['content-type'] = req_content_type
+ if data is None and form is None:
+ raise Exception('request body is required')
+ query_params = utils.get_query_params(operations.UpsertPortalWidgetRequest, request)
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
+
+ client = utils.configure_security_client(self.sdk_configuration.client, security)
+
+ http_res = client.request('POST', url, params=query_params, data=data, files=form, headers=headers)
+ content_type = http_res.headers.get('Content-Type')
+
+ res = operations.UpsertPortalWidgetResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
+
+ if http_res.status_code == 201:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[shared.UpsertPortalWidget])
+ res.upsert_portal_widget = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
+ elif http_res.status_code in [400, 401, 403, 500]:
if utils.match_content_type(content_type, 'application/json'):
out = utils.unmarshal_json(http_res.text, Optional[shared.ErrorResp])
res.error_resp = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
return res
diff --git a/customer_portal/src/epilot/models/__init__.py b/customer_portal/src/epilot/models/__init__.py
index 889f8adcf..36628d6cc 100755
--- a/customer_portal/src/epilot/models/__init__.py
+++ b/customer_portal/src/epilot/models/__init__.py
@@ -1,2 +1,3 @@
"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+# __init__.py
diff --git a/customer_portal/src/epilot/models/errors/__init__.py b/customer_portal/src/epilot/models/errors/__init__.py
new file mode 100755
index 000000000..cfd848441
--- /dev/null
+++ b/customer_portal/src/epilot/models/errors/__init__.py
@@ -0,0 +1,4 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from .sdkerror import SDKError
+__all__ = ["SDKError"]
diff --git a/customer_portal/src/epilot/models/errors/sdkerror.py b/customer_portal/src/epilot/models/errors/sdkerror.py
new file mode 100755
index 000000000..6bb02bbd6
--- /dev/null
+++ b/customer_portal/src/epilot/models/errors/sdkerror.py
@@ -0,0 +1,24 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+import requests as requests_http
+
+
+class SDKError(Exception):
+ """Represents an error returned by the API."""
+ message: str
+ status_code: int
+ body: str
+ raw_response: requests_http.Response
+
+ def __init__(self, message: str, status_code: int, body: str, raw_response: requests_http.Response):
+ self.message = message
+ self.status_code = status_code
+ self.body = body
+ self.raw_response = raw_response
+
+ def __str__(self):
+ body = ''
+ if len(self.body) > 0:
+ body = f'\n{self.body}'
+
+ return f'{self.message}: Status {self.status_code}{body}'
diff --git a/customer_portal/src/epilot/models/operations/__init__.py b/customer_portal/src/epilot/models/operations/__init__.py
index f01626339..87302eb76 100755
--- a/customer_portal/src/epilot/models/operations/__init__.py
+++ b/customer_portal/src/epilot/models/operations/__init__.py
@@ -1,25 +1,34 @@
"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
-from .activateuser import *
from .addendcustomerrelationtoentity import *
from .configuredistribution import *
from .confirmuser import *
+from .createcustomentityactivity import *
+from .createssouser import *
from .createuser import *
from .deleteentityfile import *
from .deleteportal import *
from .deleteportaluser import *
from .extrapermissionattributes import *
+from .fetchportalusersbyrelatedentity import *
from .getallcontracts import *
+from .getallfiles import *
from .getallopportunities import *
from .getallorders import *
from .getallportalconfigs import *
+from .getbillingevents import *
from .getcontact import *
+from .getcontactcount import *
from .getcontract import *
from .getcountbyemail import *
+from .getcustomerbalance import *
from .getecpcontact import *
from .getemailtemplates import *
from .getentitiesbyidentifiers import *
+from .getentityactivityfeed import *
from .getentityidentifiers import *
+from .getfilebyid import *
+from .getfilescountbyentity import *
from .getopportunity import *
from .getorder import *
from .getorganizationsettings import *
@@ -27,13 +36,17 @@
from .getportalconfig import *
from .getportalconfigbydomain import *
from .getportaluser import *
+from .getportalwidgets import *
from .getpublicportalconfig import *
+from .getpublicportalwidgets import *
from .getschemas import *
from .getvalidsecondaryattributes import *
+from .logintoportalasuser import *
from .replaceecptemplatevariables import *
from .saveentityfile import *
from .saveportalfiles import *
-from .testauth import *
+from .trackfiledownloaded import *
+from .triggerentityaccess import *
from .updatecontact import *
from .updatecontract import *
from .updateopportunity import *
@@ -41,6 +54,7 @@
from .updateportaluser import *
from .upsertemailtemplates import *
from .upsertportal import *
+from .upsertportalwidget import *
from .userexists import *
-__all__ = ["ActivateUserRequest","ActivateUserResponse","AddEndCustomerRelationToEntity200ApplicationJSON","AddEndCustomerRelationToEntityRequest","AddEndCustomerRelationToEntityResponse","AddEndCustomerRelationToEntitySecurity","ConfigureDistribution200ApplicationJSON","ConfigureDistributionRequest","ConfigureDistributionResponse","ConfigureDistributionSecurity","ConfirmUserRequest","ConfirmUserResponse","CreateUserRequest","CreateUserRequestBody","CreateUserResponse","DeleteEntityFile200ApplicationJSON","DeleteEntityFileResponse","DeleteEntityFileSecurity","DeletePortalRequest","DeletePortalResponse","DeletePortalSecurity","DeletePortalUserResponse","DeletePortalUserSecurity","ExtraPermissionAttributes200ApplicationJSON","ExtraPermissionAttributes200ApplicationJSONData","ExtraPermissionAttributesResponse","ExtraPermissionAttributesSecurity","GetAllContracts200ApplicationJSON","GetAllContractsResponse","GetAllContractsSecurity","GetAllOpportunities200ApplicationJSON","GetAllOpportunitiesResponse","GetAllOpportunitiesSecurity","GetAllOrders200ApplicationJSON","GetAllOrdersResponse","GetAllOrdersSecurity","GetAllPortalConfigs200ApplicationJSON","GetAllPortalConfigsResponse","GetAllPortalConfigsSecurity","GetContactResponse","GetContactSecurity","GetContract200ApplicationJSON","GetContractRequest","GetContractResponse","GetContractSecurity","GetCountByEmail200ApplicationJSON","GetCountByEmailRequest","GetCountByEmailResponse","GetECPContactRequest","GetECPContactResponse","GetECPContactSecurity","GetEmailTemplatesRequest","GetEmailTemplatesResponse","GetEmailTemplatesSecurity","GetEntitiesByIdentifiers200ApplicationJSON","GetEntitiesByIdentifiersRequest","GetEntitiesByIdentifiersResponse","GetEntitiesByIdentifiersSecurity","GetEntityIdentifiers200ApplicationJSON","GetEntityIdentifiers200ApplicationJSONData","GetEntityIdentifiersRequest","GetEntityIdentifiersResponse","GetEntityIdentifiersSecurity","GetOpportunity200ApplicationJSON","GetOpportunityRequest","GetOpportunityResponse","GetOpportunitySecurity","GetOrder200ApplicationJSON","GetOrderRequest","GetOrderResponse","GetOrderSecurity","GetOrgPortalConfigRequest","GetOrgPortalConfigResponse","GetOrgPortalConfigSecurity","GetOrganizationSettingsResponse","GetOrganizationSettingsSecurity","GetPortalConfigByDomainRequest","GetPortalConfigByDomainResponse","GetPortalConfigRequest","GetPortalConfigResponse","GetPortalConfigSecurity","GetPortalUserResponse","GetPortalUserSecurity","GetPublicPortalConfigRequest","GetPublicPortalConfigResponse","GetSchemas200ApplicationJSON","GetSchemasResponse","GetSchemasSecurity","GetValidSecondaryAttributes200ApplicationJSON","GetValidSecondaryAttributes200ApplicationJSONData","GetValidSecondaryAttributesResponse","GetValidSecondaryAttributesSecurity","ReplaceECPTemplateVariables200ApplicationJSON","ReplaceECPTemplateVariables200ApplicationJSONPortalUser","ReplaceECPTemplateVariablesRequest","ReplaceECPTemplateVariablesRequestBody","ReplaceECPTemplateVariablesResponse","ReplaceECPTemplateVariablesSecurity","SaveEntityFile200ApplicationJSON","SaveEntityFileResponse","SaveEntityFileSecurity","SavePortalFilesResponse","SavePortalFilesSecurity","TestAuthResponse","UpdateContactResponse","UpdateContactSecurity","UpdateContract200ApplicationJSON","UpdateContractRequest","UpdateContractResponse","UpdateContractSecurity","UpdateOpportunity200ApplicationJSON","UpdateOpportunityRequest","UpdateOpportunityResponse","UpdateOpportunitySecurity","UpdateOrderRequest","UpdateOrderResponse","UpdateOrderSecurity","UpdatePortalUserResponse","UpdatePortalUserSecurity","UpsertEmailTemplates200ApplicationJSON","UpsertEmailTemplatesRequest","UpsertEmailTemplatesResponse","UpsertEmailTemplatesSecurity","UpsertPortalRequest","UpsertPortalResponse","UpsertPortalSecurity","UserExists200ApplicationJSON","UserExists404ApplicationJSON","UserExistsRequest","UserExistsResponse"]
+__all__ = ["AddEndCustomerRelationToEntity200ApplicationJSON","AddEndCustomerRelationToEntityRequest","AddEndCustomerRelationToEntityResponse","AddEndCustomerRelationToEntitySecurity","ConfigureDistribution200ApplicationJSON","ConfigureDistributionRequest","ConfigureDistributionResponse","ConfigureDistributionSecurity","ConfirmUserRequest","ConfirmUserResponse","CreateCustomEntityActivityRequest","CreateCustomEntityActivityResponse","CreateCustomEntityActivitySecurity","CreateSSOUser201ApplicationJSON","CreateSSOUserRequest","CreateSSOUserResponse","CreateSSOUserSecurity","CreateUser201ApplicationJSON","CreateUser201ApplicationJSONMessage","CreateUserRequest","CreateUserResponse","DeleteEntityFile202ApplicationJSON","DeleteEntityFileResponse","DeleteEntityFileSecurity","DeletePortalRequest","DeletePortalResponse","DeletePortalSecurity","DeletePortalUser200ApplicationJSON","DeletePortalUser200ApplicationJSONMessage","DeletePortalUserResponse","DeletePortalUserSecurity","ExtraPermissionAttributes200ApplicationJSON","ExtraPermissionAttributes200ApplicationJSONData","ExtraPermissionAttributesResponse","ExtraPermissionAttributesSecurity","FetchPortalUsersByRelatedEntity200ApplicationJSON","FetchPortalUsersByRelatedEntityRequest","FetchPortalUsersByRelatedEntityResponse","FetchPortalUsersByRelatedEntitySecurity","GetAllContracts200ApplicationJSON","GetAllContractsRequest","GetAllContractsResponse","GetAllContractsSecurity","GetAllFiles200ApplicationJSON","GetAllFilesRequest","GetAllFilesResponse","GetAllFilesSecurity","GetAllOpportunities200ApplicationJSON","GetAllOpportunitiesRequest","GetAllOpportunitiesResponse","GetAllOpportunitiesSecurity","GetAllOrders200ApplicationJSON","GetAllOrdersRequest","GetAllOrdersResponse","GetAllOrdersSecurity","GetAllPortalConfigs200ApplicationJSON","GetAllPortalConfigsResponse","GetAllPortalConfigsSecurity","GetBillingEvents200ApplicationJSON","GetBillingEventsEventType","GetBillingEventsRequest","GetBillingEventsResponse","GetBillingEventsSecurity","GetContact200ApplicationJSON","GetContactCount200ApplicationJSON","GetContactCountRequest","GetContactCountResponse","GetContactResponse","GetContactSecurity","GetContract200ApplicationJSON","GetContractRequest","GetContractResponse","GetContractSecurity","GetCountByEmail200ApplicationJSON","GetCountByEmailRequest","GetCountByEmailResponse","GetCustomerBalanceRequest","GetCustomerBalanceResponse","GetCustomerBalanceSecurity","GetECPContact200ApplicationJSON","GetECPContactRequest","GetECPContactResponse","GetECPContactSecurity","GetEmailTemplatesRequest","GetEmailTemplatesResponse","GetEmailTemplatesSecurity","GetEntitiesByIdentifiers200ApplicationJSON","GetEntitiesByIdentifiersRequest","GetEntitiesByIdentifiersResponse","GetEntitiesByIdentifiersSecurity","GetEntityActivityFeed200ApplicationJSON","GetEntityActivityFeedRequest","GetEntityActivityFeedResponse","GetEntityIdentifiers200ApplicationJSON","GetEntityIdentifiers200ApplicationJSONData","GetEntityIdentifiersRequest","GetEntityIdentifiersResponse","GetEntityIdentifiersSecurity","GetFileByID200ApplicationJSON","GetFileByIDRequest","GetFileByIDResponse","GetFileByIDSecurity","GetFilesCountByEntityResponse","GetFilesCountByEntitySecurity","GetOpportunity200ApplicationJSON","GetOpportunityRequest","GetOpportunityResponse","GetOpportunitySecurity","GetOrder200ApplicationJSON","GetOrderRequest","GetOrderResponse","GetOrderSecurity","GetOrgPortalConfigRequest","GetOrgPortalConfigResponse","GetOrgPortalConfigSecurity","GetOrganizationSettings200ApplicationJSON","GetOrganizationSettingsResponse","GetOrganizationSettingsSecurity","GetPortalConfigByDomainRequest","GetPortalConfigByDomainResponse","GetPortalConfigRequest","GetPortalConfigResponse","GetPortalConfigSecurity","GetPortalUser200ApplicationJSON","GetPortalUserResponse","GetPortalUserSecurity","GetPortalWidgetsRequest","GetPortalWidgetsResponse","GetPortalWidgetsSecurity","GetPublicPortalConfigRequest","GetPublicPortalConfigResponse","GetPublicPortalWidgetsRequest","GetPublicPortalWidgetsResponse","GetSchemas200ApplicationJSON","GetSchemasResponse","GetSchemasSecurity","GetValidSecondaryAttributes200ApplicationJSON","GetValidSecondaryAttributes200ApplicationJSONData","GetValidSecondaryAttributesResponse","GetValidSecondaryAttributesSecurity","LoginToPortalAsUser200ApplicationJSON","LoginToPortalAsUserRequestBody","LoginToPortalAsUserResponse","LoginToPortalAsUserSecurity","ReplaceECPTemplateVariables200ApplicationJSON","ReplaceECPTemplateVariables200ApplicationJSONCustomerPortal","ReplaceECPTemplateVariables200ApplicationJSONInstallerPortal","ReplaceECPTemplateVariablesRequestBody","ReplaceECPTemplateVariablesResponse","ReplaceECPTemplateVariablesSecurity","SaveEntityFile201ApplicationJSON","SaveEntityFileResponse","SaveEntityFileSecurity","SavePortalFiles201ApplicationJSON","SavePortalFilesResponse","SavePortalFilesSecurity","TrackFileDownloaded200ApplicationJSON","TrackFileDownloadedRequest","TrackFileDownloadedResponse","TrackFileDownloadedSecurity","TriggerEntityAccess200ApplicationJSON","TriggerEntityAccessRequest","TriggerEntityAccessResponse","TriggerEntityAccessSecurity","UpdateContact200ApplicationJSON","UpdateContact403ApplicationJSON","UpdateContactResponse","UpdateContactSecurity","UpdateContract200ApplicationJSON","UpdateContract403ApplicationJSON","UpdateContractRequest","UpdateContractResponse","UpdateContractSecurity","UpdateOpportunity200ApplicationJSON","UpdateOpportunityRequest","UpdateOpportunityResponse","UpdateOpportunitySecurity","UpdateOrder200ApplicationJSON","UpdateOrderRequest","UpdateOrderResponse","UpdateOrderSecurity","UpdatePortalUser200ApplicationJSON","UpdatePortalUserResponse","UpdatePortalUserSecurity","UpsertEmailTemplates200ApplicationJSON","UpsertEmailTemplates200ApplicationJSONMessage","UpsertEmailTemplatesRequest","UpsertEmailTemplatesResponse","UpsertEmailTemplatesSecurity","UpsertPortalRequest","UpsertPortalResponse","UpsertPortalSecurity","UpsertPortalWidgetRequest","UpsertPortalWidgetResponse","UpsertPortalWidgetSecurity","UserExists200ApplicationJSON","UserExistsRequest","UserExistsResponse"]
diff --git a/customer_portal/src/epilot/models/operations/activateuser.py b/customer_portal/src/epilot/models/operations/activateuser.py
deleted file mode 100755
index 313eca4ba..000000000
--- a/customer_portal/src/epilot/models/operations/activateuser.py
+++ /dev/null
@@ -1,24 +0,0 @@
-"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
-
-from __future__ import annotations
-import dataclasses
-import requests as requests_http
-from ..shared import useractivationpayload as shared_useractivationpayload
-from typing import Optional
-
-
-@dataclasses.dataclass
-class ActivateUserRequest:
-
- token: str = dataclasses.field(metadata={'query_param': { 'field_name': 'token', 'style': 'form', 'explode': True }})
- r"""Invite Token"""
- user_activation_payload: Optional[shared_useractivationpayload.UserActivationPayload] = dataclasses.field(default=None, metadata={'request': { 'media_type': 'application/json' }})
-
-
-@dataclasses.dataclass
-class ActivateUserResponse:
-
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
-
\ No newline at end of file
diff --git a/customer_portal/src/epilot/models/operations/addendcustomerrelationtoentity.py b/customer_portal/src/epilot/models/operations/addendcustomerrelationtoentity.py
index e3c81a30b..40bb89df1 100755
--- a/customer_portal/src/epilot/models/operations/addendcustomerrelationtoentity.py
+++ b/customer_portal/src/epilot/models/operations/addendcustomerrelationtoentity.py
@@ -3,41 +3,52 @@
from __future__ import annotations
import dataclasses
import requests as requests_http
+from ..shared import entityitem as shared_entityitem
+from ..shared import entityslug as shared_entityslug
+from ..shared import errorresp as shared_errorresp
from dataclasses_json import Undefined, dataclass_json
from epilot import utils
-from typing import Any, Optional
+from typing import List, Optional
@dataclasses.dataclass
class AddEndCustomerRelationToEntitySecurity:
+ portal_auth: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
- portal_auth: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
-
+
+
@dataclasses.dataclass
class AddEndCustomerRelationToEntityRequest:
-
id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'id', 'style': 'simple', 'explode': False }})
- r"""The Id of the Entity"""
- slug: str = dataclasses.field(metadata={'path_param': { 'field_name': 'slug', 'style': 'simple', 'explode': False }})
- r"""The slug of an entity"""
+ r"""The ID of the Entity"""
+ slug: shared_entityslug.EntitySlug = dataclasses.field(metadata={'path_param': { 'field_name': 'slug', 'style': 'simple', 'explode': False }})
+ r"""The slug of an entity"""
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class AddEndCustomerRelationToEntity200ApplicationJSON:
- r"""The returned Entity"""
-
- entity: Optional[dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity'), 'exclude': lambda f: f is None }})
- relations: Optional[list[dict[str, Any]]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('relations'), 'exclude': lambda f: f is None }})
+ r"""Portal user is added as a relation to the requested entity successfully."""
+ entity: Optional[shared_entityitem.EntityItem] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity'), 'exclude': lambda f: f is None }})
+ relations: Optional[List[shared_entityitem.EntityItem]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('relations'), 'exclude': lambda f: f is None }})
+
+
@dataclasses.dataclass
class AddEndCustomerRelationToEntityResponse:
-
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
add_end_customer_relation_to_entity_200_application_json_object: Optional[AddEndCustomerRelationToEntity200ApplicationJSON] = dataclasses.field(default=None)
- r"""The returned Entity"""
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
-
\ No newline at end of file
+ r"""Portal user is added as a relation to the requested entity successfully."""
+ error_resp: Optional[shared_errorresp.ErrorResp] = dataclasses.field(default=None)
+ r"""Could not authenticate the user"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
+
+
diff --git a/customer_portal/src/epilot/models/operations/configuredistribution.py b/customer_portal/src/epilot/models/operations/configuredistribution.py
index 87199d901..5e7c09beb 100755
--- a/customer_portal/src/epilot/models/operations/configuredistribution.py
+++ b/customer_portal/src/epilot/models/operations/configuredistribution.py
@@ -3,7 +3,8 @@
from __future__ import annotations
import dataclasses
import requests as requests_http
-from ..shared import origin_enum as shared_origin_enum
+from ..shared import errorresp as shared_errorresp
+from ..shared import origin as shared_origin
from dataclasses_json import Undefined, dataclass_json
from epilot import utils
from typing import Optional
@@ -11,31 +12,40 @@
@dataclasses.dataclass
class ConfigureDistributionSecurity:
+ epilot_auth: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
- epilot_auth: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
-
+
+
@dataclasses.dataclass
class ConfigureDistributionRequest:
+ origin: shared_origin.Origin = dataclasses.field(metadata={'query_param': { 'field_name': 'origin', 'style': 'form', 'explode': True }})
+ r"""Origin of the portal"""
- origin: shared_origin_enum.OriginEnum = dataclasses.field(metadata={'query_param': { 'field_name': 'origin', 'style': 'form', 'explode': True }})
- r"""Origin of the portal"""
-
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class ConfigureDistribution200ApplicationJSON:
- r"""The returned configured distribution id"""
-
- domain_name: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('domainName'), 'exclude': lambda f: f is None }})
+ r"""The cloudfront distribution has been configure successfully for the custom domain."""
+ domain_name: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('domainName'), 'exclude': lambda f: f is None }})
+ r"""The domain name of the configured distribution"""
+
+
@dataclasses.dataclass
class ConfigureDistributionResponse:
-
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
configure_distribution_200_application_json_object: Optional[ConfigureDistribution200ApplicationJSON] = dataclasses.field(default=None)
- r"""The returned configured distribution id"""
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
-
\ No newline at end of file
+ r"""The cloudfront distribution has been configure successfully for the custom domain."""
+ error_resp: Optional[shared_errorresp.ErrorResp] = dataclasses.field(default=None)
+ r"""Could not authenticate the user"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
+
+
diff --git a/customer_portal/src/epilot/models/operations/confirmuser.py b/customer_portal/src/epilot/models/operations/confirmuser.py
index de1f8bacd..8864c7219 100755
--- a/customer_portal/src/epilot/models/operations/confirmuser.py
+++ b/customer_portal/src/epilot/models/operations/confirmuser.py
@@ -3,26 +3,32 @@
from __future__ import annotations
import dataclasses
import requests as requests_http
-from ..shared import origin_enum as shared_origin_enum
-from typing import Any, Optional
+from ..shared import errorresp as shared_errorresp
+from ..shared import origin as shared_origin
+from typing import Optional
@dataclasses.dataclass
class ConfirmUserRequest:
-
id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'id', 'style': 'simple', 'explode': False }})
- r"""The Id of portal user id"""
- org_id: str = dataclasses.field(metadata={'query_param': { 'field_name': 'org_id', 'style': 'form', 'explode': True }})
- origin: shared_origin_enum.OriginEnum = dataclasses.field(metadata={'query_param': { 'field_name': 'origin', 'style': 'form', 'explode': True }})
- r"""Origin of the portal"""
+ r"""The ID of portal user id"""
+ org_id: str = dataclasses.field(metadata={'query_param': { 'field_name': 'org_id', 'style': 'form', 'explode': True }})
+ r"""Organization ID"""
+ origin: shared_origin.Origin = dataclasses.field(metadata={'query_param': { 'field_name': 'origin', 'style': 'form', 'explode': True }})
+ r"""Origin of the portal"""
+
+
@dataclasses.dataclass
class ConfirmUserResponse:
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
+ error_resp: Optional[shared_errorresp.ErrorResp] = dataclasses.field(default=None)
+ r"""Internal Server Error"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
- entity_item: Optional[dict[str, Any]] = dataclasses.field(default=None)
- r"""The returned portal user"""
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
-
\ No newline at end of file
+
diff --git a/customer_portal/src/epilot/models/operations/createcustomentityactivity.py b/customer_portal/src/epilot/models/operations/createcustomentityactivity.py
new file mode 100755
index 000000000..d76d7ddf8
--- /dev/null
+++ b/customer_portal/src/epilot/models/operations/createcustomentityactivity.py
@@ -0,0 +1,41 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import requests as requests_http
+from ..shared import activity as shared_activity
+from ..shared import activityitem as shared_activityitem
+from ..shared import errorresp as shared_errorresp
+from typing import List, Optional
+
+
+@dataclasses.dataclass
+class CreateCustomEntityActivitySecurity:
+ portal_auth: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
+
+
+
+
+@dataclasses.dataclass
+class CreateCustomEntityActivityRequest:
+ activity: Optional[shared_activity.Activity] = dataclasses.field(default=None, metadata={'request': { 'media_type': 'application/json' }})
+ entities: Optional[List[str]] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'entities', 'style': 'form', 'explode': False }})
+ r"""Comma-separated list of entities which the activity primarily concerns"""
+
+
+
+
+@dataclasses.dataclass
+class CreateCustomEntityActivityResponse:
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
+ activity_item: Optional[shared_activityitem.ActivityItem] = dataclasses.field(default=None)
+ r"""Success"""
+ error_resp: Optional[shared_errorresp.ErrorResp] = dataclasses.field(default=None)
+ r"""Could not authenticate the user"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
+
+
diff --git a/customer_portal/src/epilot/models/operations/createssouser.py b/customer_portal/src/epilot/models/operations/createssouser.py
new file mode 100755
index 000000000..4bb26ebcb
--- /dev/null
+++ b/customer_portal/src/epilot/models/operations/createssouser.py
@@ -0,0 +1,55 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import requests as requests_http
+from ..shared import createssouserrequest as shared_createssouserrequest
+from ..shared import errorresp as shared_errorresp
+from ..shared import origin as shared_origin
+from ..shared import portaluser as shared_portaluser
+from dataclasses_json import Undefined, dataclass_json
+from epilot import utils
+from typing import Optional
+
+
+@dataclasses.dataclass
+class CreateSSOUserSecurity:
+ epilot_auth: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
+
+
+
+
+@dataclasses.dataclass
+class CreateSSOUserRequest:
+ create_sso_user_request: shared_createssouserrequest.CreateSSOUserRequest = dataclasses.field(metadata={'request': { 'media_type': 'application/json' }})
+ r"""Portal user payload"""
+ origin: shared_origin.Origin = dataclasses.field(metadata={'query_param': { 'field_name': 'origin', 'style': 'form', 'explode': True }})
+ r"""Origin of the portal"""
+
+
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class CreateSSOUser201ApplicationJSON:
+ r"""SSO User created successfully."""
+ data: Optional[shared_portaluser.PortalUser] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('data'), 'exclude': lambda f: f is None }})
+ r"""The portal user entity"""
+
+
+
+
+@dataclasses.dataclass
+class CreateSSOUserResponse:
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
+ create_sso_user_201_application_json_object: Optional[CreateSSOUser201ApplicationJSON] = dataclasses.field(default=None)
+ r"""SSO User created successfully."""
+ error_resp: Optional[shared_errorresp.ErrorResp] = dataclasses.field(default=None)
+ r"""The request could not be validated"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
+
+
diff --git a/customer_portal/src/epilot/models/operations/createuser.py b/customer_portal/src/epilot/models/operations/createuser.py
index 6e7894159..85f66c6bc 100755
--- a/customer_portal/src/epilot/models/operations/createuser.py
+++ b/customer_portal/src/epilot/models/operations/createuser.py
@@ -3,43 +3,51 @@
from __future__ import annotations
import dataclasses
import requests as requests_http
-from ..shared import addportalresp as shared_addportalresp
+from ..shared import createuserrequest as shared_createuserrequest
from ..shared import errorresp as shared_errorresp
-from ..shared import origin_enum as shared_origin_enum
+from ..shared import origin as shared_origin
+from ..shared import portaluser as shared_portaluser
from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
from epilot import utils
from typing import Optional
-@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
-class CreateUserRequestBody:
- r"""Portal payload"""
-
- contact_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('contactId'), 'exclude': lambda f: f is None }})
- email: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('email'), 'exclude': lambda f: f is None }})
- org_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('orgId'), 'exclude': lambda f: f is None }})
- password: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('password'), 'exclude': lambda f: f is None }})
- secondary_identifier: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('secondaryIdentifier'), 'exclude': lambda f: f is None }})
+class CreateUserRequest:
+ create_user_request: shared_createuserrequest.CreateUserRequest = dataclasses.field(metadata={'request': { 'media_type': 'application/json' }})
+ r"""Portal user payload"""
+ origin: shared_origin.Origin = dataclasses.field(metadata={'query_param': { 'field_name': 'origin', 'style': 'form', 'explode': True }})
+ r"""Origin of the portal"""
+
+class CreateUser201ApplicationJSONMessage(str, Enum):
+ USER_CREATED_SUCCESSFULLY = 'User created successfully'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
-class CreateUserRequest:
-
- origin: shared_origin_enum.OriginEnum = dataclasses.field(metadata={'query_param': { 'field_name': 'origin', 'style': 'form', 'explode': True }})
- r"""Origin of the portal"""
- request_body: CreateUserRequestBody = dataclasses.field(metadata={'request': { 'media_type': 'application/json' }})
- r"""Portal payload"""
+class CreateUser201ApplicationJSON:
+ r"""User created successfully."""
+ message: CreateUser201ApplicationJSONMessage = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('message') }})
+ response: shared_portaluser.PortalUser = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('response') }})
+ r"""The portal user entity"""
+
+
@dataclasses.dataclass
class CreateUserResponse:
-
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
- add_portal_resp: Optional[shared_addportalresp.AddPortalResp] = dataclasses.field(default=None)
- r"""Success - user created with success."""
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
+ create_user_201_application_json_object: Optional[CreateUser201ApplicationJSON] = dataclasses.field(default=None)
+ r"""User created successfully."""
error_resp: Optional[shared_errorresp.ErrorResp] = dataclasses.field(default=None)
- r"""Validation Errors"""
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
-
\ No newline at end of file
+ r"""The request could not be validated"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
+
+
diff --git a/customer_portal/src/epilot/models/operations/deleteentityfile.py b/customer_portal/src/epilot/models/operations/deleteentityfile.py
index 11854a68c..5a07ea75e 100755
--- a/customer_portal/src/epilot/models/operations/deleteentityfile.py
+++ b/customer_portal/src/epilot/models/operations/deleteentityfile.py
@@ -3,31 +3,39 @@
from __future__ import annotations
import dataclasses
import requests as requests_http
+from ..shared import errorresp as shared_errorresp
from dataclasses_json import Undefined, dataclass_json
from epilot import utils
-from typing import Optional
+from typing import List, Optional
@dataclasses.dataclass
class DeleteEntityFileSecurity:
+ portal_auth: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
- portal_auth: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
-
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
-class DeleteEntityFile200ApplicationJSON:
- r"""The returned File Entities"""
-
- deleted_files: Optional[list[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('deletedFiles'), 'exclude': lambda f: f is None }})
+class DeleteEntityFile202ApplicationJSON:
+ r"""The files are removed from the requested entity successfully."""
+ deleted_files: Optional[List[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('deletedFiles'), 'exclude': lambda f: f is None }})
+
+
@dataclasses.dataclass
class DeleteEntityFileResponse:
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
+ delete_entity_file_202_application_json_object: Optional[DeleteEntityFile202ApplicationJSON] = dataclasses.field(default=None)
+ r"""The files are removed from the requested entity successfully."""
+ error_resp: Optional[shared_errorresp.ErrorResp] = dataclasses.field(default=None)
+ r"""The request could not be validated"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
- delete_entity_file_200_application_json_object: Optional[DeleteEntityFile200ApplicationJSON] = dataclasses.field(default=None)
- r"""The returned File Entities"""
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
-
\ No newline at end of file
+
diff --git a/customer_portal/src/epilot/models/operations/deleteportal.py b/customer_portal/src/epilot/models/operations/deleteportal.py
index e45379c67..fa66a4f8d 100755
--- a/customer_portal/src/epilot/models/operations/deleteportal.py
+++ b/customer_portal/src/epilot/models/operations/deleteportal.py
@@ -3,27 +3,35 @@
from __future__ import annotations
import dataclasses
import requests as requests_http
-from ..shared import origin_enum as shared_origin_enum
+from ..shared import errorresp as shared_errorresp
+from ..shared import origin as shared_origin
from typing import Optional
@dataclasses.dataclass
class DeletePortalSecurity:
+ epilot_auth: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
- epilot_auth: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
-
+
+
@dataclasses.dataclass
class DeletePortalRequest:
-
- origin: shared_origin_enum.OriginEnum = dataclasses.field(metadata={'query_param': { 'field_name': 'origin', 'style': 'form', 'explode': True }})
- r"""Origin of the portal"""
+ origin: shared_origin.Origin = dataclasses.field(metadata={'query_param': { 'field_name': 'origin', 'style': 'form', 'explode': True }})
+ r"""Origin of the portal"""
+
+
@dataclasses.dataclass
class DeletePortalResponse:
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
+ error_resp: Optional[shared_errorresp.ErrorResp] = dataclasses.field(default=None)
+ r"""Could not authenticate the user"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
-
\ No newline at end of file
+
diff --git a/customer_portal/src/epilot/models/operations/deleteportaluser.py b/customer_portal/src/epilot/models/operations/deleteportaluser.py
index 9f45f6042..9cd644808 100755
--- a/customer_portal/src/epilot/models/operations/deleteportaluser.py
+++ b/customer_portal/src/epilot/models/operations/deleteportaluser.py
@@ -3,21 +3,45 @@
from __future__ import annotations
import dataclasses
import requests as requests_http
+from ..shared import errorresp as shared_errorresp
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from epilot import utils
from typing import Optional
@dataclasses.dataclass
class DeletePortalUserSecurity:
+ portal_auth: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
- portal_auth: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
+
+
+class DeletePortalUser200ApplicationJSONMessage(str, Enum):
+ USER_SUCCESFULLY_DELETED = 'User Succesfully Deleted'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DeletePortalUser200ApplicationJSON:
+ r"""Portal user deleted successfully."""
+ data: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('data'), 'exclude': lambda f: f is None }})
+ r"""Entity ID"""
+ message: Optional[DeletePortalUser200ApplicationJSONMessage] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('message'), 'exclude': lambda f: f is None }})
+
+
@dataclasses.dataclass
class DeletePortalUserResponse:
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
+ delete_portal_user_200_application_json_object: Optional[DeletePortalUser200ApplicationJSON] = dataclasses.field(default=None)
+ r"""Portal user deleted successfully."""
+ error_resp: Optional[shared_errorresp.ErrorResp] = dataclasses.field(default=None)
+ r"""Could not authenticate the user"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
- delete_portal_user_200_application_json_string: Optional[str] = dataclasses.field(default=None)
- r"""The returned portal user id"""
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
-
\ No newline at end of file
+
diff --git a/customer_portal/src/epilot/models/operations/extrapermissionattributes.py b/customer_portal/src/epilot/models/operations/extrapermissionattributes.py
index 06f1ae873..7d76ccd7c 100755
--- a/customer_portal/src/epilot/models/operations/extrapermissionattributes.py
+++ b/customer_portal/src/epilot/models/operations/extrapermissionattributes.py
@@ -3,42 +3,53 @@
from __future__ import annotations
import dataclasses
import requests as requests_http
+from ..shared import errorresp as shared_errorresp
from ..shared import extraschemaattributes as shared_extraschemaattributes
from dataclasses_json import Undefined, dataclass_json
from epilot import utils
-from typing import Optional
+from typing import List, Optional
@dataclasses.dataclass
class ExtraPermissionAttributesSecurity:
+ epilot_auth: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
- epilot_auth: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
-
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class ExtraPermissionAttributes200ApplicationJSONData:
+ contact: Optional[List[shared_extraschemaattributes.ExtraSchemaAttributes]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('contact'), 'exclude': lambda f: f is None }})
+ contract: Optional[List[shared_extraschemaattributes.ExtraSchemaAttributes]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('contract'), 'exclude': lambda f: f is None }})
+ meter: Optional[List[shared_extraschemaattributes.ExtraSchemaAttributes]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('meter'), 'exclude': lambda f: f is None }})
+ meter_counter: Optional[List[shared_extraschemaattributes.ExtraSchemaAttributes]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('meter_counter'), 'exclude': lambda f: f is None }})
+ opportunity: Optional[List[shared_extraschemaattributes.ExtraSchemaAttributes]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('opportunity'), 'exclude': lambda f: f is None }})
+ order: Optional[List[shared_extraschemaattributes.ExtraSchemaAttributes]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('order'), 'exclude': lambda f: f is None }})
- contact: Optional[list[shared_extraschemaattributes.ExtraSchemaAttributes]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('contact'), 'exclude': lambda f: f is None }})
- contract: Optional[list[shared_extraschemaattributes.ExtraSchemaAttributes]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('contract'), 'exclude': lambda f: f is None }})
- opportunity: Optional[list[shared_extraschemaattributes.ExtraSchemaAttributes]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('opportunity'), 'exclude': lambda f: f is None }})
- order: Optional[list[shared_extraschemaattributes.ExtraSchemaAttributes]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('order'), 'exclude': lambda f: f is None }})
-
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class ExtraPermissionAttributes200ApplicationJSON:
- r"""Success"""
-
- data: Optional[ExtraPermissionAttributes200ApplicationJSONData] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('data'), 'exclude': lambda f: f is None }})
+ r"""Retrieved extra permission attributes successfully."""
+ data: Optional[ExtraPermissionAttributes200ApplicationJSONData] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('data'), 'exclude': lambda f: f is None }})
+
+
@dataclasses.dataclass
class ExtraPermissionAttributesResponse:
-
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
+ error_resp: Optional[shared_errorresp.ErrorResp] = dataclasses.field(default=None)
+ r"""Internal Server Error"""
extra_permission_attributes_200_application_json_object: Optional[ExtraPermissionAttributes200ApplicationJSON] = dataclasses.field(default=None)
- r"""Success"""
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
-
\ No newline at end of file
+ r"""Retrieved extra permission attributes successfully."""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
+
+
diff --git a/customer_portal/src/epilot/models/operations/fetchportalusersbyrelatedentity.py b/customer_portal/src/epilot/models/operations/fetchportalusersbyrelatedentity.py
new file mode 100755
index 000000000..6707673c9
--- /dev/null
+++ b/customer_portal/src/epilot/models/operations/fetchportalusersbyrelatedentity.py
@@ -0,0 +1,52 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import requests as requests_http
+from ..shared import entityslug as shared_entityslug
+from ..shared import errorresp as shared_errorresp
+from ..shared import portaluser as shared_portaluser
+from dataclasses_json import Undefined, dataclass_json
+from epilot import utils
+from typing import List, Optional
+
+
+@dataclasses.dataclass
+class FetchPortalUsersByRelatedEntitySecurity:
+ epilot_auth: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
+
+
+
+
+@dataclasses.dataclass
+class FetchPortalUsersByRelatedEntityRequest:
+ entity_id: str = dataclasses.field(metadata={'query_param': { 'field_name': 'entity_id', 'style': 'form', 'explode': True }})
+ slug: shared_entityslug.EntitySlug = dataclasses.field(metadata={'query_param': { 'field_name': 'slug', 'style': 'form', 'explode': True }})
+ r"""URL-friendly identifier for the entity schema"""
+
+
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class FetchPortalUsersByRelatedEntity200ApplicationJSON:
+ r"""Returns the portal users under the given entity."""
+ portal_users: Optional[List[shared_portaluser.PortalUser]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('portalUsers'), 'exclude': lambda f: f is None }})
+
+
+
+
+@dataclasses.dataclass
+class FetchPortalUsersByRelatedEntityResponse:
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
+ error_resp: Optional[shared_errorresp.ErrorResp] = dataclasses.field(default=None)
+ r"""Could not authenticate the user"""
+ fetch_portal_users_by_related_entity_200_application_json_object: Optional[FetchPortalUsersByRelatedEntity200ApplicationJSON] = dataclasses.field(default=None)
+ r"""Returns the portal users under the given entity."""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
+
+
diff --git a/customer_portal/src/epilot/models/operations/getallcontracts.py b/customer_portal/src/epilot/models/operations/getallcontracts.py
index 142130cf0..2cc8ddfd1 100755
--- a/customer_portal/src/epilot/models/operations/getallcontracts.py
+++ b/customer_portal/src/epilot/models/operations/getallcontracts.py
@@ -3,31 +3,48 @@
from __future__ import annotations
import dataclasses
import requests as requests_http
+from ..shared import contract as shared_contract
+from ..shared import errorresp as shared_errorresp
from dataclasses_json import Undefined, dataclass_json
from epilot import utils
-from typing import Any, Optional
+from typing import List, Optional
@dataclasses.dataclass
class GetAllContractsSecurity:
+ portal_auth: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
- portal_auth: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
+
+
+
+@dataclasses.dataclass
+class GetAllContractsRequest:
+ from_: Optional[float] = dataclasses.field(default=0, metadata={'query_param': { 'field_name': 'from', 'style': 'form', 'explode': True }})
+ size: Optional[float] = dataclasses.field(default=100, metadata={'query_param': { 'field_name': 'size', 'style': 'form', 'explode': True }})
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class GetAllContracts200ApplicationJSON:
- r"""The returned contracts"""
-
- data: Optional[list[dict[str, Any]]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('data'), 'exclude': lambda f: f is None }})
+ r"""Contracts have been retrieved successfully."""
+ data: Optional[List[shared_contract.Contract]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('data'), 'exclude': lambda f: f is None }})
+
+
@dataclasses.dataclass
class GetAllContractsResponse:
-
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
+ error_resp: Optional[shared_errorresp.ErrorResp] = dataclasses.field(default=None)
+ r"""Could not authenticate the user"""
get_all_contracts_200_application_json_object: Optional[GetAllContracts200ApplicationJSON] = dataclasses.field(default=None)
- r"""The returned contracts"""
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
-
\ No newline at end of file
+ r"""Contracts have been retrieved successfully."""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
+
+
diff --git a/customer_portal/src/epilot/models/operations/getallfiles.py b/customer_portal/src/epilot/models/operations/getallfiles.py
new file mode 100755
index 000000000..f1bc4d804
--- /dev/null
+++ b/customer_portal/src/epilot/models/operations/getallfiles.py
@@ -0,0 +1,54 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import requests as requests_http
+from ..shared import errorresp as shared_errorresp
+from ..shared import fileitem as shared_fileitem
+from dataclasses_json import Undefined, dataclass_json
+from epilot import utils
+from typing import List, Optional
+
+
+@dataclasses.dataclass
+class GetAllFilesSecurity:
+ portal_auth: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
+
+
+
+
+@dataclasses.dataclass
+class GetAllFilesRequest:
+ from_: float = dataclasses.field(metadata={'query_param': { 'field_name': 'from', 'style': 'form', 'explode': True }})
+ size: float = dataclasses.field(metadata={'query_param': { 'field_name': 'size', 'style': 'form', 'explode': True }})
+ entity_ids: Optional[List[str]] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'entity_ids', 'style': 'form', 'explode': True }})
+ r"""List of entity ids to filter the results"""
+
+
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class GetAllFiles200ApplicationJSON:
+ r"""The files have been fetched successfully."""
+ hits: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hits'), 'exclude': lambda f: f is None }})
+ r"""Total number of files for pagination"""
+ results: Optional[List[shared_fileitem.FileItem]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('results'), 'exclude': lambda f: f is None }})
+
+
+
+
+@dataclasses.dataclass
+class GetAllFilesResponse:
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
+ error_resp: Optional[shared_errorresp.ErrorResp] = dataclasses.field(default=None)
+ r"""Could not authenticate the user"""
+ get_all_files_200_application_json_object: Optional[GetAllFiles200ApplicationJSON] = dataclasses.field(default=None)
+ r"""The files have been fetched successfully."""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
+
+
diff --git a/customer_portal/src/epilot/models/operations/getallopportunities.py b/customer_portal/src/epilot/models/operations/getallopportunities.py
index 2b8f2b255..987cb3024 100755
--- a/customer_portal/src/epilot/models/operations/getallopportunities.py
+++ b/customer_portal/src/epilot/models/operations/getallopportunities.py
@@ -3,31 +3,48 @@
from __future__ import annotations
import dataclasses
import requests as requests_http
+from ..shared import errorresp as shared_errorresp
+from ..shared import opportunity as shared_opportunity
from dataclasses_json import Undefined, dataclass_json
from epilot import utils
-from typing import Any, Optional
+from typing import List, Optional
@dataclasses.dataclass
class GetAllOpportunitiesSecurity:
+ portal_auth: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
- portal_auth: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
+
+
+
+@dataclasses.dataclass
+class GetAllOpportunitiesRequest:
+ from_: Optional[float] = dataclasses.field(default=0, metadata={'query_param': { 'field_name': 'from', 'style': 'form', 'explode': True }})
+ size: Optional[float] = dataclasses.field(default=100, metadata={'query_param': { 'field_name': 'size', 'style': 'form', 'explode': True }})
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class GetAllOpportunities200ApplicationJSON:
- r"""The returned opportunities"""
-
- data: Optional[list[dict[str, Any]]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('data'), 'exclude': lambda f: f is None }})
+ r"""The opportunities is retrieved successfully for the portal user."""
+ data: Optional[List[shared_opportunity.Opportunity]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('data'), 'exclude': lambda f: f is None }})
+
+
@dataclasses.dataclass
class GetAllOpportunitiesResponse:
-
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
+ error_resp: Optional[shared_errorresp.ErrorResp] = dataclasses.field(default=None)
+ r"""Could not authenticate the user"""
get_all_opportunities_200_application_json_object: Optional[GetAllOpportunities200ApplicationJSON] = dataclasses.field(default=None)
- r"""The returned opportunities"""
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
-
\ No newline at end of file
+ r"""The opportunities is retrieved successfully for the portal user."""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
+
+
diff --git a/customer_portal/src/epilot/models/operations/getallorders.py b/customer_portal/src/epilot/models/operations/getallorders.py
index bb6bcfd1d..2e061e6c5 100755
--- a/customer_portal/src/epilot/models/operations/getallorders.py
+++ b/customer_portal/src/epilot/models/operations/getallorders.py
@@ -3,31 +3,48 @@
from __future__ import annotations
import dataclasses
import requests as requests_http
+from ..shared import errorresp as shared_errorresp
+from ..shared import order as shared_order
from dataclasses_json import Undefined, dataclass_json
from epilot import utils
-from typing import Any, Optional
+from typing import List, Optional
@dataclasses.dataclass
class GetAllOrdersSecurity:
+ portal_auth: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
- portal_auth: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
+
+
+
+@dataclasses.dataclass
+class GetAllOrdersRequest:
+ from_: Optional[float] = dataclasses.field(default=0, metadata={'query_param': { 'field_name': 'from', 'style': 'form', 'explode': True }})
+ size: Optional[float] = dataclasses.field(default=100, metadata={'query_param': { 'field_name': 'size', 'style': 'form', 'explode': True }})
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class GetAllOrders200ApplicationJSON:
- r"""The returned orders"""
-
- data: Optional[list[dict[str, Any]]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('data'), 'exclude': lambda f: f is None }})
+ r"""The orders for the portal user returned successfully."""
+ data: Optional[List[shared_order.Order]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('data'), 'exclude': lambda f: f is None }})
+
+
@dataclasses.dataclass
class GetAllOrdersResponse:
-
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
+ error_resp: Optional[shared_errorresp.ErrorResp] = dataclasses.field(default=None)
+ r"""Could not authenticate the user"""
get_all_orders_200_application_json_object: Optional[GetAllOrders200ApplicationJSON] = dataclasses.field(default=None)
- r"""The returned orders"""
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
-
\ No newline at end of file
+ r"""The orders for the portal user returned successfully."""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
+
+
diff --git a/customer_portal/src/epilot/models/operations/getallportalconfigs.py b/customer_portal/src/epilot/models/operations/getallportalconfigs.py
index 4e566050b..2eea7c25a 100755
--- a/customer_portal/src/epilot/models/operations/getallportalconfigs.py
+++ b/customer_portal/src/epilot/models/operations/getallportalconfigs.py
@@ -3,32 +3,40 @@
from __future__ import annotations
import dataclasses
import requests as requests_http
+from ..shared import errorresp as shared_errorresp
from ..shared import portalconfig as shared_portalconfig
from dataclasses_json import Undefined, dataclass_json
from epilot import utils
-from typing import Optional
+from typing import List, Optional
@dataclasses.dataclass
class GetAllPortalConfigsSecurity:
+ epilot_auth: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
- epilot_auth: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
-
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class GetAllPortalConfigs200ApplicationJSON:
- r"""ok"""
-
- data: Optional[list[shared_portalconfig.PortalConfig]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('data'), 'exclude': lambda f: f is None }})
+ r"""All portal configs retrieved successfully."""
+ data: Optional[List[shared_portalconfig.PortalConfig]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('data'), 'exclude': lambda f: f is None }})
+
+
@dataclasses.dataclass
class GetAllPortalConfigsResponse:
-
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
+ error_resp: Optional[shared_errorresp.ErrorResp] = dataclasses.field(default=None)
+ r"""Could not authenticate the user"""
get_all_portal_configs_200_application_json_object: Optional[GetAllPortalConfigs200ApplicationJSON] = dataclasses.field(default=None)
- r"""ok"""
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
-
\ No newline at end of file
+ r"""All portal configs retrieved successfully."""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
+
+
diff --git a/customer_portal/src/epilot/models/operations/getbillingevents.py b/customer_portal/src/epilot/models/operations/getbillingevents.py
new file mode 100755
index 000000000..af442da9b
--- /dev/null
+++ b/customer_portal/src/epilot/models/operations/getbillingevents.py
@@ -0,0 +1,60 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import requests as requests_http
+from ..shared import billingevent as shared_billingevent
+from ..shared import installmentevent as shared_installmentevent
+from dataclasses_json import Undefined, dataclass_json
+from datetime import date
+from enum import Enum
+from epilot import utils
+from typing import List, Optional, Union
+
+
+@dataclasses.dataclass
+class GetBillingEventsSecurity:
+ portal_auth: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
+
+
+
+class GetBillingEventsEventType(str, Enum):
+ r"""Type of billing event to filter by"""
+ INSTALLMENT = 'installment'
+ REIMBURSEMENT = 'reimbursement'
+
+
+@dataclasses.dataclass
+class GetBillingEventsRequest:
+ customer_id: str = dataclasses.field(metadata={'query_param': { 'field_name': 'customer_id', 'style': 'form', 'explode': True }})
+ date_after: Optional[date] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'date_after', 'style': 'form', 'explode': True }})
+ date_before: Optional[date] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'date_before', 'style': 'form', 'explode': True }})
+ entity_id: Optional[List[str]] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'entity_id', 'style': 'form', 'explode': True }})
+ event_type: Optional[List[GetBillingEventsEventType]] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'event_type', 'style': 'form', 'explode': True }})
+
+
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class GetBillingEvents200ApplicationJSON:
+ r"""List billing events for all contracts/orders of specific customer"""
+ hits: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hits'), 'exclude': lambda f: f is None }})
+ r"""Total number of billing events for pagination"""
+ results: Optional[List[Union[shared_installmentevent.InstallmentEvent, shared_billingevent.BillingEventReimbursementEvent]]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('results'), 'exclude': lambda f: f is None }})
+
+
+
+
+@dataclasses.dataclass
+class GetBillingEventsResponse:
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
+ get_billing_events_200_application_json_object: Optional[GetBillingEvents200ApplicationJSON] = dataclasses.field(default=None)
+ r"""List billing events for all contracts/orders of specific customer"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
+
+
diff --git a/customer_portal/src/epilot/models/operations/getcontact.py b/customer_portal/src/epilot/models/operations/getcontact.py
index 3035ec9fa..4001ba566 100755
--- a/customer_portal/src/epilot/models/operations/getcontact.py
+++ b/customer_portal/src/epilot/models/operations/getcontact.py
@@ -3,24 +3,45 @@
from __future__ import annotations
import dataclasses
import requests as requests_http
+from ..shared import contact as shared_contact
+from ..shared import entityitem as shared_entityitem
from ..shared import errorresp as shared_errorresp
-from typing import Any, Optional
+from ..shared import file as shared_file
+from dataclasses_json import Undefined, dataclass_json
+from epilot import utils
+from typing import List, Optional
@dataclasses.dataclass
class GetContactSecurity:
+ portal_auth: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
- portal_auth: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
+
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class GetContact200ApplicationJSON:
+ r"""Retrieves the mapped contact of the logged in user successfully."""
+ entity: Optional[shared_contact.Contact] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity'), 'exclude': lambda f: f is None }})
+ r"""The mapped contact of the portal user"""
+ files: Optional[List[shared_file.File]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('files'), 'exclude': lambda f: f is None }})
+ relations: Optional[List[shared_entityitem.EntityItem]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('relations'), 'exclude': lambda f: f is None }})
+
+
@dataclasses.dataclass
class GetContactResponse:
-
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
- entity_item: Optional[dict[str, Any]] = dataclasses.field(default=None)
- r"""The returned contact"""
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
error_resp: Optional[shared_errorresp.ErrorResp] = dataclasses.field(default=None)
- r"""Other errors"""
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
-
\ No newline at end of file
+ r"""Could not authenticate the user"""
+ get_contact_200_application_json_object: Optional[GetContact200ApplicationJSON] = dataclasses.field(default=None)
+ r"""Retrieves the mapped contact of the logged in user successfully."""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
+
+
diff --git a/customer_portal/src/epilot/models/operations/getcontactcount.py b/customer_portal/src/epilot/models/operations/getcontactcount.py
new file mode 100755
index 000000000..52843f957
--- /dev/null
+++ b/customer_portal/src/epilot/models/operations/getcontactcount.py
@@ -0,0 +1,47 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import requests as requests_http
+from ..shared import contactcountrequest as shared_contactcountrequest
+from ..shared import errorresp as shared_errorresp
+from ..shared import origin as shared_origin
+from dataclasses_json import Undefined, dataclass_json
+from epilot import utils
+from typing import Optional
+
+
+@dataclasses.dataclass
+class GetContactCountRequest:
+ contact_count_request: shared_contactcountrequest.ContactCountRequest = dataclasses.field(metadata={'request': { 'media_type': 'application/json' }})
+ r"""Request payload"""
+ origin: shared_origin.Origin = dataclasses.field(metadata={'query_param': { 'field_name': 'origin', 'style': 'form', 'explode': True }})
+ r"""Origin of the portal"""
+
+
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class GetContactCount200ApplicationJSON:
+ r"""Contact count for the request successfully."""
+ count: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('count'), 'exclude': lambda f: f is None }})
+ r"""Count of Contact"""
+
+
+
+
+@dataclasses.dataclass
+class GetContactCountResponse:
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
+ error_resp: Optional[shared_errorresp.ErrorResp] = dataclasses.field(default=None)
+ r"""The request could not be validated"""
+ get_contact_count_200_application_json_object: Optional[GetContactCount200ApplicationJSON] = dataclasses.field(default=None)
+ r"""Contact count for the request successfully."""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
+
+
diff --git a/customer_portal/src/epilot/models/operations/getcontract.py b/customer_portal/src/epilot/models/operations/getcontract.py
index 857c9c8d1..9b4bb9272 100755
--- a/customer_portal/src/epilot/models/operations/getcontract.py
+++ b/customer_portal/src/epilot/models/operations/getcontract.py
@@ -3,39 +3,59 @@
from __future__ import annotations
import dataclasses
import requests as requests_http
+from ..shared import contract as shared_contract
+from ..shared import entityitem as shared_entityitem
+from ..shared import errorresp as shared_errorresp
+from ..shared import file as shared_file
+from ..shared import order as shared_order
from dataclasses_json import Undefined, dataclass_json
from epilot import utils
-from typing import Any, Optional
+from typing import Any, Dict, List, Optional
@dataclasses.dataclass
class GetContractSecurity:
+ portal_auth: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
- portal_auth: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
-
+
+
@dataclasses.dataclass
class GetContractRequest:
-
id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'id', 'style': 'simple', 'explode': False }})
- r"""The Id of the contract"""
+ r"""The ID of the contract"""
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class GetContract200ApplicationJSON:
- r"""The returned contract"""
-
- entity: Optional[dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity'), 'exclude': lambda f: f is None }})
- relations: Optional[list[dict[str, Any]]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('relations'), 'exclude': lambda f: f is None }})
+ r"""The requested contract returned successfully."""
+ entity: Optional[shared_contract.Contract] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity'), 'exclude': lambda f: f is None }})
+ r"""The contract entity"""
+ files: Optional[List[shared_file.File]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('files'), 'exclude': lambda f: f is None }})
+ r"""The related files of the requested contract"""
+ orders: Optional[List[shared_order.Order]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('orders'), 'exclude': lambda f: f is None }})
+ r"""The related orders of the requested contract"""
+ relations: Optional[List[shared_entityitem.EntityItem]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('relations'), 'exclude': lambda f: f is None }})
+ r"""The related entities of the requested contract"""
+ workflow: Optional[List[Dict[str, Any]]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('workflow'), 'exclude': lambda f: f is None }})
+
+
@dataclasses.dataclass
class GetContractResponse:
-
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
+ error_resp: Optional[shared_errorresp.ErrorResp] = dataclasses.field(default=None)
+ r"""Could not authenticate the user"""
get_contract_200_application_json_object: Optional[GetContract200ApplicationJSON] = dataclasses.field(default=None)
- r"""The returned contract"""
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
-
\ No newline at end of file
+ r"""The requested contract returned successfully."""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
+
+
diff --git a/customer_portal/src/epilot/models/operations/getcountbyemail.py b/customer_portal/src/epilot/models/operations/getcountbyemail.py
index babc7c205..e8d9b1720 100755
--- a/customer_portal/src/epilot/models/operations/getcountbyemail.py
+++ b/customer_portal/src/epilot/models/operations/getcountbyemail.py
@@ -3,6 +3,7 @@
from __future__ import annotations
import dataclasses
import requests as requests_http
+from ..shared import errorresp as shared_errorresp
from dataclasses_json import Undefined, dataclass_json
from epilot import utils
from typing import Optional
@@ -10,25 +11,33 @@
@dataclasses.dataclass
class GetCountByEmailRequest:
+ email: str = dataclasses.field(metadata={'query_param': { 'field_name': 'email', 'style': 'form', 'explode': True }})
+ org_id: str = dataclasses.field(metadata={'query_param': { 'field_name': 'org_id', 'style': 'form', 'explode': True }})
- email: str = dataclasses.field(metadata={'query_param': { 'field_name': 'email', 'style': 'form', 'explode': True }})
- org_id: str = dataclasses.field(metadata={'query_param': { 'field_name': 'org_id', 'style': 'form', 'explode': True }})
-
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class GetCountByEmail200ApplicationJSON:
- r"""The returned count of contact"""
-
- count: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('count'), 'exclude': lambda f: f is None }})
+ r"""Contact count for the requested email successfully."""
+ count: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('count'), 'exclude': lambda f: f is None }})
+ r"""Count of Contact"""
+
+
@dataclasses.dataclass
class GetCountByEmailResponse:
-
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
+ error_resp: Optional[shared_errorresp.ErrorResp] = dataclasses.field(default=None)
+ r"""Internal Server Error"""
get_count_by_email_200_application_json_object: Optional[GetCountByEmail200ApplicationJSON] = dataclasses.field(default=None)
- r"""The returned count of contact"""
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
-
\ No newline at end of file
+ r"""Contact count for the requested email successfully."""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
+
+
diff --git a/customer_portal/src/epilot/models/operations/getcustomerbalance.py b/customer_portal/src/epilot/models/operations/getcustomerbalance.py
new file mode 100755
index 000000000..7ec1f4004
--- /dev/null
+++ b/customer_portal/src/epilot/models/operations/getcustomerbalance.py
@@ -0,0 +1,36 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import requests as requests_http
+from ..shared import balance as shared_balance
+from typing import Optional
+
+
+@dataclasses.dataclass
+class GetCustomerBalanceSecurity:
+ epilot_auth: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
+
+
+
+
+@dataclasses.dataclass
+class GetCustomerBalanceRequest:
+ customer_entity_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'customer_entity_id', 'style': 'simple', 'explode': False }})
+ r"""Customer entity ID (contact or account)"""
+
+
+
+
+@dataclasses.dataclass
+class GetCustomerBalanceResponse:
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
+ balance: Optional[shared_balance.Balance] = dataclasses.field(default=None)
+ r"""OK"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
+
+
diff --git a/customer_portal/src/epilot/models/operations/getecpcontact.py b/customer_portal/src/epilot/models/operations/getecpcontact.py
index 41bb4917e..b143d1258 100755
--- a/customer_portal/src/epilot/models/operations/getecpcontact.py
+++ b/customer_portal/src/epilot/models/operations/getecpcontact.py
@@ -3,30 +3,48 @@
from __future__ import annotations
import dataclasses
import requests as requests_http
+from ..shared import contact as shared_contact
from ..shared import errorresp as shared_errorresp
-from typing import Any, Optional
+from dataclasses_json import Undefined, dataclass_json
+from epilot import utils
+from typing import Optional
@dataclasses.dataclass
class GetECPContactSecurity:
+ epilot_auth: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
- epilot_auth: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
-
+
+
@dataclasses.dataclass
class GetECPContactRequest:
+ id: str = dataclasses.field(metadata={'query_param': { 'field_name': 'id', 'style': 'form', 'explode': True }})
- id: str = dataclasses.field(metadata={'query_param': { 'field_name': 'id', 'style': 'form', 'explode': True }})
+
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class GetECPContact200ApplicationJSON:
+ r"""The contact returned successfully."""
+ data: Optional[shared_contact.Contact] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('data'), 'exclude': lambda f: f is None }})
+ r"""The mapped contact of the portal user"""
+
+
@dataclasses.dataclass
class GetECPContactResponse:
-
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
- entity_item: Optional[dict[str, Any]] = dataclasses.field(default=None)
- r"""The returned contact"""
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
error_resp: Optional[shared_errorresp.ErrorResp] = dataclasses.field(default=None)
- r"""Other errors"""
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
-
\ No newline at end of file
+ r"""Could not authenticate the user"""
+ get_ecp_contact_200_application_json_object: Optional[GetECPContact200ApplicationJSON] = dataclasses.field(default=None)
+ r"""The contact returned successfully."""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
+
+
diff --git a/customer_portal/src/epilot/models/operations/getemailtemplates.py b/customer_portal/src/epilot/models/operations/getemailtemplates.py
index 33f27b987..17e34d78f 100755
--- a/customer_portal/src/epilot/models/operations/getemailtemplates.py
+++ b/customer_portal/src/epilot/models/operations/getemailtemplates.py
@@ -4,29 +4,37 @@
import dataclasses
import requests as requests_http
from ..shared import emailtemplates as shared_emailtemplates
-from ..shared import origin_enum as shared_origin_enum
+from ..shared import errorresp as shared_errorresp
+from ..shared import origin as shared_origin
from typing import Optional
@dataclasses.dataclass
class GetEmailTemplatesSecurity:
+ epilot_auth: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
- epilot_auth: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
-
+
+
@dataclasses.dataclass
class GetEmailTemplatesRequest:
+ origin: shared_origin.Origin = dataclasses.field(metadata={'query_param': { 'field_name': 'origin', 'style': 'form', 'explode': True }})
+ r"""Origin of the portal"""
- origin: shared_origin_enum.OriginEnum = dataclasses.field(metadata={'query_param': { 'field_name': 'origin', 'style': 'form', 'explode': True }})
- r"""Origin of the portal"""
-
+
+
@dataclasses.dataclass
class GetEmailTemplatesResponse:
-
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
email_templates: Optional[shared_emailtemplates.EmailTemplates] = dataclasses.field(default=None)
- r"""ok"""
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
-
\ No newline at end of file
+ r"""Retrieved the email templates successfully."""
+ error_resp: Optional[shared_errorresp.ErrorResp] = dataclasses.field(default=None)
+ r"""Could not authenticate the user"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
+
+
diff --git a/customer_portal/src/epilot/models/operations/getentitiesbyidentifiers.py b/customer_portal/src/epilot/models/operations/getentitiesbyidentifiers.py
index 2ba90e9c1..5a4a60978 100755
--- a/customer_portal/src/epilot/models/operations/getentitiesbyidentifiers.py
+++ b/customer_portal/src/epilot/models/operations/getentitiesbyidentifiers.py
@@ -3,40 +3,51 @@
from __future__ import annotations
import dataclasses
import requests as requests_http
+from ..shared import entityitem as shared_entityitem
+from ..shared import entityslug as shared_entityslug
+from ..shared import errorresp as shared_errorresp
from dataclasses_json import Undefined, dataclass_json
from epilot import utils
-from typing import Any, Optional
+from typing import Any, Dict, List, Optional
@dataclasses.dataclass
class GetEntitiesByIdentifiersSecurity:
+ portal_auth: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
- portal_auth: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
-
+
+
@dataclasses.dataclass
class GetEntitiesByIdentifiersRequest:
-
- request_body: dict[str, Any] = dataclasses.field(metadata={'request': { 'media_type': 'application/json' }})
- r"""Entity Identifiers"""
- slug: str = dataclasses.field(metadata={'path_param': { 'field_name': 'slug', 'style': 'simple', 'explode': False }})
- r"""The slug of an entity"""
+ request_body: Dict[str, Any] = dataclasses.field(metadata={'request': { 'media_type': 'application/json' }})
+ r"""The entities are retrieved successfully."""
+ slug: shared_entityslug.EntitySlug = dataclasses.field(metadata={'path_param': { 'field_name': 'slug', 'style': 'simple', 'explode': False }})
+ r"""The slug of an entity"""
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class GetEntitiesByIdentifiers200ApplicationJSON:
r"""The returned Entities"""
-
- data: Optional[list[dict[str, Any]]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('data'), 'exclude': lambda f: f is None }})
+ data: Optional[List[shared_entityitem.EntityItem]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('data'), 'exclude': lambda f: f is None }})
+
+
@dataclasses.dataclass
class GetEntitiesByIdentifiersResponse:
-
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
+ error_resp: Optional[shared_errorresp.ErrorResp] = dataclasses.field(default=None)
+ r"""The request could not be validated"""
get_entities_by_identifiers_200_application_json_object: Optional[GetEntitiesByIdentifiers200ApplicationJSON] = dataclasses.field(default=None)
- r"""The returned Entities"""
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
-
\ No newline at end of file
+ r"""The returned Entities"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
+
+
diff --git a/customer_portal/src/epilot/models/operations/getentityactivityfeed.py b/customer_portal/src/epilot/models/operations/getentityactivityfeed.py
new file mode 100755
index 000000000..3fcb151fb
--- /dev/null
+++ b/customer_portal/src/epilot/models/operations/getentityactivityfeed.py
@@ -0,0 +1,57 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import requests as requests_http
+from ..shared import activityitem as shared_activityitem
+from ..shared import entityslug as shared_entityslug
+from dataclasses_json import Undefined, dataclass_json
+from datetime import datetime
+from epilot import utils
+from typing import List, Optional
+
+
+@dataclasses.dataclass
+class GetEntityActivityFeedRequest:
+ id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'id', 'style': 'simple', 'explode': False }})
+ r"""Entity id"""
+ slug: shared_entityslug.EntitySlug = dataclasses.field(metadata={'path_param': { 'field_name': 'slug', 'style': 'simple', 'explode': False }})
+ r"""Entity Type"""
+ after: Optional[datetime] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'after', 'style': 'form', 'explode': True }})
+ r"""Get activities after this timestamp"""
+ before: Optional[datetime] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'before', 'style': 'form', 'explode': True }})
+ r"""get activities before this timestamp"""
+ from_: Optional[int] = dataclasses.field(default=0, metadata={'query_param': { 'field_name': 'from', 'style': 'form', 'explode': True }})
+ r"""start from page"""
+ include_relations: Optional[bool] = dataclasses.field(default=False, metadata={'query_param': { 'field_name': 'include_relations', 'style': 'form', 'explode': True }})
+ r"""Include activities from related entities"""
+ size: Optional[int] = dataclasses.field(default=25, metadata={'query_param': { 'field_name': 'size', 'style': 'form', 'explode': True }})
+ r"""max number of results to return"""
+ type: Optional[str] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'type', 'style': 'form', 'explode': True }})
+ r"""Filter by activity type"""
+
+
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class GetEntityActivityFeed200ApplicationJSON:
+ r"""Success"""
+ results: Optional[List[shared_activityitem.ActivityItem]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('results'), 'exclude': lambda f: f is None }})
+ total: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('total'), 'exclude': lambda f: f is None }})
+
+
+
+
+@dataclasses.dataclass
+class GetEntityActivityFeedResponse:
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
+ get_entity_activity_feed_200_application_json_object: Optional[GetEntityActivityFeed200ApplicationJSON] = dataclasses.field(default=None)
+ r"""Success"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
+
+
diff --git a/customer_portal/src/epilot/models/operations/getentityidentifiers.py b/customer_portal/src/epilot/models/operations/getentityidentifiers.py
index 0a3535512..bd9cd1cd0 100755
--- a/customer_portal/src/epilot/models/operations/getentityidentifiers.py
+++ b/customer_portal/src/epilot/models/operations/getentityidentifiers.py
@@ -3,46 +3,59 @@
from __future__ import annotations
import dataclasses
import requests as requests_http
+from ..shared import entityslug as shared_entityslug
+from ..shared import errorresp as shared_errorresp
from dataclasses_json import Undefined, dataclass_json
from epilot import utils
-from typing import Optional
+from typing import List, Optional
@dataclasses.dataclass
class GetEntityIdentifiersSecurity:
+ epilot_auth: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
- epilot_auth: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
-
+
+
@dataclasses.dataclass
class GetEntityIdentifiersRequest:
-
- slug: str = dataclasses.field(metadata={'path_param': { 'field_name': 'slug', 'style': 'simple', 'explode': False }})
- r"""The slug of an entity"""
+ slug: shared_entityslug.EntitySlug = dataclasses.field(metadata={'path_param': { 'field_name': 'slug', 'style': 'simple', 'explode': False }})
+ r"""The slug of an entity"""
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class GetEntityIdentifiers200ApplicationJSONData:
+ name: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name'), 'exclude': lambda f: f is None }})
+ r"""The name of the identifier"""
+ type: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }})
+ r"""The type of the identifier"""
- name: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name'), 'exclude': lambda f: f is None }})
- type: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }})
-
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class GetEntityIdentifiers200ApplicationJSON:
- r"""The returned identifiers of an entity"""
-
- data: Optional[list[GetEntityIdentifiers200ApplicationJSONData]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('data'), 'exclude': lambda f: f is None }})
+ r"""The identifiers of the requested entity returned successfully."""
+ data: Optional[List[GetEntityIdentifiers200ApplicationJSONData]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('data'), 'exclude': lambda f: f is None }})
+
+
@dataclasses.dataclass
class GetEntityIdentifiersResponse:
-
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
+ error_resp: Optional[shared_errorresp.ErrorResp] = dataclasses.field(default=None)
+ r"""Could not authenticate the user"""
get_entity_identifiers_200_application_json_object: Optional[GetEntityIdentifiers200ApplicationJSON] = dataclasses.field(default=None)
- r"""The returned identifiers of an entity"""
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
-
\ No newline at end of file
+ r"""The identifiers of the requested entity returned successfully."""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
+
+
diff --git a/customer_portal/src/epilot/models/operations/getfilebyid.py b/customer_portal/src/epilot/models/operations/getfilebyid.py
new file mode 100755
index 000000000..ce182512f
--- /dev/null
+++ b/customer_portal/src/epilot/models/operations/getfilebyid.py
@@ -0,0 +1,50 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import requests as requests_http
+from ..shared import errorresp as shared_errorresp
+from ..shared import fileitem as shared_fileitem
+from dataclasses_json import Undefined, dataclass_json
+from epilot import utils
+from typing import Optional
+
+
+@dataclasses.dataclass
+class GetFileByIDSecurity:
+ portal_auth: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
+
+
+
+
+@dataclasses.dataclass
+class GetFileByIDRequest:
+ id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'id', 'style': 'simple', 'explode': False }})
+ r"""The Id of a file"""
+
+
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class GetFileByID200ApplicationJSON:
+ r"""The files have been fetched successfully."""
+ file: Optional[shared_fileitem.FileItem] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('file'), 'exclude': lambda f: f is None }})
+
+
+
+
+@dataclasses.dataclass
+class GetFileByIDResponse:
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
+ error_resp: Optional[shared_errorresp.ErrorResp] = dataclasses.field(default=None)
+ r"""Could not authenticate the user"""
+ get_file_by_id_200_application_json_object: Optional[GetFileByID200ApplicationJSON] = dataclasses.field(default=None)
+ r"""The files have been fetched successfully."""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
+
+
diff --git a/customer_portal/src/epilot/models/operations/getfilescountbyentity.py b/customer_portal/src/epilot/models/operations/getfilescountbyentity.py
new file mode 100755
index 000000000..907170bef
--- /dev/null
+++ b/customer_portal/src/epilot/models/operations/getfilescountbyentity.py
@@ -0,0 +1,31 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import requests as requests_http
+from ..shared import entityfilecount as shared_entityfilecount
+from ..shared import errorresp as shared_errorresp
+from typing import List, Optional
+
+
+@dataclasses.dataclass
+class GetFilesCountByEntitySecurity:
+ portal_auth: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
+
+
+
+
+@dataclasses.dataclass
+class GetFilesCountByEntityResponse:
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
+ entity_file_counts: Optional[List[shared_entityfilecount.EntityFileCount]] = dataclasses.field(default=None)
+ r"""The file counts have been fetched successfully."""
+ error_resp: Optional[shared_errorresp.ErrorResp] = dataclasses.field(default=None)
+ r"""Could not authenticate the user"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
+
+
diff --git a/customer_portal/src/epilot/models/operations/getopportunity.py b/customer_portal/src/epilot/models/operations/getopportunity.py
index 14806a59f..523899afb 100755
--- a/customer_portal/src/epilot/models/operations/getopportunity.py
+++ b/customer_portal/src/epilot/models/operations/getopportunity.py
@@ -3,39 +3,60 @@
from __future__ import annotations
import dataclasses
import requests as requests_http
+from ..shared import entityitem as shared_entityitem
+from ..shared import errorresp as shared_errorresp
+from ..shared import file as shared_file
+from ..shared import opportunity as shared_opportunity
+from ..shared import order as shared_order
from dataclasses_json import Undefined, dataclass_json
from epilot import utils
-from typing import Any, Optional
+from typing import Any, Dict, List, Optional
@dataclasses.dataclass
class GetOpportunitySecurity:
+ portal_auth: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
- portal_auth: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
-
+
+
@dataclasses.dataclass
class GetOpportunityRequest:
-
id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'id', 'style': 'simple', 'explode': False }})
- r"""The Id of opportunities"""
+ r"""The ID of opportunity"""
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class GetOpportunity200ApplicationJSON:
r"""The returned opportunities"""
-
- entity: Optional[dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity'), 'exclude': lambda f: f is None }})
- relations: Optional[list[dict[str, Any]]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('relations'), 'exclude': lambda f: f is None }})
+ entity: Optional[shared_opportunity.Opportunity] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity'), 'exclude': lambda f: f is None }})
+ r"""The opportunity entity"""
+ files: Optional[List[shared_file.File]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('files'), 'exclude': lambda f: f is None }})
+ r"""The related files of the requested opportunity"""
+ orders: Optional[List[shared_order.Order]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('orders'), 'exclude': lambda f: f is None }})
+ r"""The related orders of the requested opportunity"""
+ relations: Optional[List[shared_entityitem.EntityItem]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('relations'), 'exclude': lambda f: f is None }})
+ r"""The related entities of the requested opportunity"""
+ workflow: Optional[List[Dict[str, Any]]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('workflow'), 'exclude': lambda f: f is None }})
+ r"""The related workflows of the requested opportunity"""
+
+
@dataclasses.dataclass
class GetOpportunityResponse:
-
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
+ error_resp: Optional[shared_errorresp.ErrorResp] = dataclasses.field(default=None)
+ r"""Could not authenticate the user"""
get_opportunity_200_application_json_object: Optional[GetOpportunity200ApplicationJSON] = dataclasses.field(default=None)
- r"""The returned opportunities"""
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
-
\ No newline at end of file
+ r"""The returned opportunities"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
+
+
diff --git a/customer_portal/src/epilot/models/operations/getorder.py b/customer_portal/src/epilot/models/operations/getorder.py
index 4ccf478d5..bbab25e99 100755
--- a/customer_portal/src/epilot/models/operations/getorder.py
+++ b/customer_portal/src/epilot/models/operations/getorder.py
@@ -3,39 +3,62 @@
from __future__ import annotations
import dataclasses
import requests as requests_http
+from ..shared import entityitem as shared_entityitem
+from ..shared import errorresp as shared_errorresp
+from ..shared import file as shared_file
+from ..shared import order as shared_order
+from ..shared import product as shared_product
from dataclasses_json import Undefined, dataclass_json
from epilot import utils
-from typing import Any, Optional
+from typing import Any, Dict, List, Optional
@dataclasses.dataclass
class GetOrderSecurity:
+ portal_auth: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
- portal_auth: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
-
+
+
@dataclasses.dataclass
class GetOrderRequest:
-
id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'id', 'style': 'simple', 'explode': False }})
- r"""The Id of order"""
+ r"""The ID of order"""
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class GetOrder200ApplicationJSON:
- r"""The returned order"""
-
- entity: Optional[dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity'), 'exclude': lambda f: f is None }})
- relations: Optional[list[dict[str, Any]]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('relations'), 'exclude': lambda f: f is None }})
+ r"""The requested order has been retrieved successfully."""
+ cross_sellable_products: Optional[List[shared_product.Product]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('crossSellableProducts'), 'exclude': lambda f: f is None }})
+ r"""The related cross sellable products of the requested order"""
+ entity: Optional[shared_order.Order] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity'), 'exclude': lambda f: f is None }})
+ r"""The order entity"""
+ files: Optional[List[shared_file.File]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('files'), 'exclude': lambda f: f is None }})
+ r"""The related files of the requested order"""
+ products: Optional[List[shared_product.Product]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('products'), 'exclude': lambda f: f is None }})
+ r"""The related products of the requested order"""
+ relations: Optional[List[shared_entityitem.EntityItem]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('relations'), 'exclude': lambda f: f is None }})
+ r"""The related entities of the requested order"""
+ workflow: Optional[List[Dict[str, Any]]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('workflow'), 'exclude': lambda f: f is None }})
+ r"""The related workflows of the requested order"""
+
+
@dataclasses.dataclass
class GetOrderResponse:
-
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
+ error_resp: Optional[shared_errorresp.ErrorResp] = dataclasses.field(default=None)
+ r"""Could not authenticate the user"""
get_order_200_application_json_object: Optional[GetOrder200ApplicationJSON] = dataclasses.field(default=None)
- r"""The returned order"""
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
-
\ No newline at end of file
+ r"""The requested order has been retrieved successfully."""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
+
+
diff --git a/customer_portal/src/epilot/models/operations/getorganizationsettings.py b/customer_portal/src/epilot/models/operations/getorganizationsettings.py
index ed1b1968d..279c71aa1 100755
--- a/customer_portal/src/epilot/models/operations/getorganizationsettings.py
+++ b/customer_portal/src/epilot/models/operations/getorganizationsettings.py
@@ -3,22 +3,40 @@
from __future__ import annotations
import dataclasses
import requests as requests_http
+from ..shared import errorresp as shared_errorresp
from ..shared import organizationsettings as shared_organizationsettings
+from dataclasses_json import Undefined, dataclass_json
+from epilot import utils
from typing import Optional
@dataclasses.dataclass
class GetOrganizationSettingsSecurity:
+ portal_auth: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
- portal_auth: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
+
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class GetOrganizationSettings200ApplicationJSON:
+ r"""Retrieved the settings for an organization successfully."""
+ data: Optional[shared_organizationsettings.OrganizationSettings] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('data'), 'exclude': lambda f: f is None }})
+
+
@dataclasses.dataclass
class GetOrganizationSettingsResponse:
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
+ error_resp: Optional[shared_errorresp.ErrorResp] = dataclasses.field(default=None)
+ r"""Could not authenticate the user"""
+ get_organization_settings_200_application_json_object: Optional[GetOrganizationSettings200ApplicationJSON] = dataclasses.field(default=None)
+ r"""Retrieved the settings for an organization successfully."""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
- organization_settings: Optional[shared_organizationsettings.OrganizationSettings] = dataclasses.field(default=None)
- r"""ok"""
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
-
\ No newline at end of file
+
diff --git a/customer_portal/src/epilot/models/operations/getorgportalconfig.py b/customer_portal/src/epilot/models/operations/getorgportalconfig.py
index 0848ae9e3..75a7a68ec 100755
--- a/customer_portal/src/epilot/models/operations/getorgportalconfig.py
+++ b/customer_portal/src/epilot/models/operations/getorgportalconfig.py
@@ -3,30 +3,38 @@
from __future__ import annotations
import dataclasses
import requests as requests_http
-from ..shared import origin_enum as shared_origin_enum
+from ..shared import errorresp as shared_errorresp
+from ..shared import origin as shared_origin
from ..shared import portalconfig as shared_portalconfig
from typing import Optional
@dataclasses.dataclass
class GetOrgPortalConfigSecurity:
+ epilot_auth: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
- epilot_auth: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
-
+
+
@dataclasses.dataclass
class GetOrgPortalConfigRequest:
+ origin: shared_origin.Origin = dataclasses.field(metadata={'query_param': { 'field_name': 'origin', 'style': 'form', 'explode': True }})
+ r"""Origin of the portal"""
- origin: shared_origin_enum.OriginEnum = dataclasses.field(metadata={'query_param': { 'field_name': 'origin', 'style': 'form', 'explode': True }})
- r"""Origin of the portal"""
-
+
+
@dataclasses.dataclass
class GetOrgPortalConfigResponse:
-
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
+ error_resp: Optional[shared_errorresp.ErrorResp] = dataclasses.field(default=None)
+ r"""Could not authenticate the user"""
portal_config: Optional[shared_portalconfig.PortalConfig] = dataclasses.field(default=None)
- r"""ok"""
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
-
\ No newline at end of file
+ r"""Portal config retrieved successfully."""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
+
+
diff --git a/customer_portal/src/epilot/models/operations/getportalconfig.py b/customer_portal/src/epilot/models/operations/getportalconfig.py
index 54c5b55fe..43edb39f1 100755
--- a/customer_portal/src/epilot/models/operations/getportalconfig.py
+++ b/customer_portal/src/epilot/models/operations/getportalconfig.py
@@ -3,31 +3,39 @@
from __future__ import annotations
import dataclasses
import requests as requests_http
-from ..shared import origin_enum as shared_origin_enum
+from ..shared import errorresp as shared_errorresp
+from ..shared import origin as shared_origin
from ..shared import portalconfig as shared_portalconfig
from typing import Optional
@dataclasses.dataclass
class GetPortalConfigSecurity:
+ epilot_auth: Optional[str] = dataclasses.field(default=None, metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
+ portal_auth: Optional[str] = dataclasses.field(default=None, metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
- epilot_auth: Optional[str] = dataclasses.field(default=None, metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
- portal_auth: Optional[str] = dataclasses.field(default=None, metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
-
+
+
@dataclasses.dataclass
class GetPortalConfigRequest:
+ origin: Optional[shared_origin.Origin] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'origin', 'style': 'form', 'explode': True }})
+ r"""Origin of the portal"""
- origin: Optional[shared_origin_enum.OriginEnum] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'origin', 'style': 'form', 'explode': True }})
- r"""Origin of the portal"""
-
+
+
@dataclasses.dataclass
class GetPortalConfigResponse:
-
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
+ error_resp: Optional[shared_errorresp.ErrorResp] = dataclasses.field(default=None)
+ r"""Could not authenticate the user"""
portal_config: Optional[shared_portalconfig.PortalConfig] = dataclasses.field(default=None)
- r"""ok"""
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
-
\ No newline at end of file
+ r"""Portal config retrieved successfully."""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
+
+
diff --git a/customer_portal/src/epilot/models/operations/getportalconfigbydomain.py b/customer_portal/src/epilot/models/operations/getportalconfigbydomain.py
index dbe80e05c..ef22a3983 100755
--- a/customer_portal/src/epilot/models/operations/getportalconfigbydomain.py
+++ b/customer_portal/src/epilot/models/operations/getportalconfigbydomain.py
@@ -3,22 +3,29 @@
from __future__ import annotations
import dataclasses
import requests as requests_http
+from ..shared import errorresp as shared_errorresp
from ..shared import portalconfig as shared_portalconfig
from typing import Optional
@dataclasses.dataclass
class GetPortalConfigByDomainRequest:
+ domain: str = dataclasses.field(metadata={'query_param': { 'field_name': 'domain', 'style': 'form', 'explode': True }})
- domain: str = dataclasses.field(metadata={'query_param': { 'field_name': 'domain', 'style': 'form', 'explode': True }})
-
+
+
@dataclasses.dataclass
class GetPortalConfigByDomainResponse:
-
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
+ error_resp: Optional[shared_errorresp.ErrorResp] = dataclasses.field(default=None)
+ r"""Internal Server Error"""
portal_config: Optional[shared_portalconfig.PortalConfig] = dataclasses.field(default=None)
- r"""ok"""
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
-
\ No newline at end of file
+ r"""Portal config retrieved successfully."""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
+
+
diff --git a/customer_portal/src/epilot/models/operations/getportaluser.py b/customer_portal/src/epilot/models/operations/getportaluser.py
index cba5b7335..7fea173e7 100755
--- a/customer_portal/src/epilot/models/operations/getportaluser.py
+++ b/customer_portal/src/epilot/models/operations/getportaluser.py
@@ -3,21 +3,41 @@
from __future__ import annotations
import dataclasses
import requests as requests_http
-from typing import Any, Optional
+from ..shared import errorresp as shared_errorresp
+from ..shared import portaluser as shared_portaluser
+from dataclasses_json import Undefined, dataclass_json
+from epilot import utils
+from typing import Optional
@dataclasses.dataclass
class GetPortalUserSecurity:
+ portal_auth: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
- portal_auth: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
+
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class GetPortalUser200ApplicationJSON:
+ r"""Portal user returned successfully."""
+ data: Optional[shared_portaluser.PortalUser] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('data'), 'exclude': lambda f: f is None }})
+ r"""The portal user entity"""
+
+
@dataclasses.dataclass
class GetPortalUserResponse:
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
+ error_resp: Optional[shared_errorresp.ErrorResp] = dataclasses.field(default=None)
+ r"""Could not authenticate the user"""
+ get_portal_user_200_application_json_object: Optional[GetPortalUser200ApplicationJSON] = dataclasses.field(default=None)
+ r"""Portal user returned successfully."""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
- entity_item: Optional[dict[str, Any]] = dataclasses.field(default=None)
- r"""The returned portal user"""
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
-
\ No newline at end of file
+
diff --git a/customer_portal/src/epilot/models/operations/getportalwidgets.py b/customer_portal/src/epilot/models/operations/getportalwidgets.py
new file mode 100755
index 000000000..a37a14882
--- /dev/null
+++ b/customer_portal/src/epilot/models/operations/getportalwidgets.py
@@ -0,0 +1,41 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import requests as requests_http
+from ..shared import errorresp as shared_errorresp
+from ..shared import origin as shared_origin
+from ..shared import upsertportalwidget as shared_upsertportalwidget
+from typing import Optional
+
+
+@dataclasses.dataclass
+class GetPortalWidgetsSecurity:
+ epilot_auth: Optional[str] = dataclasses.field(default=None, metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
+ portal_auth: Optional[str] = dataclasses.field(default=None, metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
+
+
+
+
+@dataclasses.dataclass
+class GetPortalWidgetsRequest:
+ origin: Optional[shared_origin.Origin] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'origin', 'style': 'form', 'explode': True }})
+ r"""Origin of the portal"""
+
+
+
+
+@dataclasses.dataclass
+class GetPortalWidgetsResponse:
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
+ error_resp: Optional[shared_errorresp.ErrorResp] = dataclasses.field(default=None)
+ r"""Could not authenticate the user"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
+ upsert_portal_widget: Optional[shared_upsertportalwidget.UpsertPortalWidget] = dataclasses.field(default=None)
+ r"""Retrieved the portal widgets successfully."""
+
+
diff --git a/customer_portal/src/epilot/models/operations/getpublicportalconfig.py b/customer_portal/src/epilot/models/operations/getpublicportalconfig.py
index f5cabb312..d0491de33 100755
--- a/customer_portal/src/epilot/models/operations/getpublicportalconfig.py
+++ b/customer_portal/src/epilot/models/operations/getpublicportalconfig.py
@@ -3,25 +3,32 @@
from __future__ import annotations
import dataclasses
import requests as requests_http
-from ..shared import origin_enum as shared_origin_enum
+from ..shared import errorresp as shared_errorresp
+from ..shared import origin as shared_origin
from ..shared import portalconfig as shared_portalconfig
from typing import Optional
@dataclasses.dataclass
class GetPublicPortalConfigRequest:
+ org_id: str = dataclasses.field(metadata={'query_param': { 'field_name': 'org_id', 'style': 'form', 'explode': True }})
+ origin: shared_origin.Origin = dataclasses.field(metadata={'query_param': { 'field_name': 'origin', 'style': 'form', 'explode': True }})
+ r"""Origin of the portal"""
- org_id: str = dataclasses.field(metadata={'query_param': { 'field_name': 'org_id', 'style': 'form', 'explode': True }})
- origin: shared_origin_enum.OriginEnum = dataclasses.field(metadata={'query_param': { 'field_name': 'origin', 'style': 'form', 'explode': True }})
- r"""Origin of the portal"""
-
+
+
@dataclasses.dataclass
class GetPublicPortalConfigResponse:
-
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
+ error_resp: Optional[shared_errorresp.ErrorResp] = dataclasses.field(default=None)
+ r"""Internal Server Error"""
portal_config: Optional[shared_portalconfig.PortalConfig] = dataclasses.field(default=None)
- r"""ok"""
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
-
\ No newline at end of file
+ r"""Portal config retrieved successfully."""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
+
+
diff --git a/customer_portal/src/epilot/models/operations/getpublicportalwidgets.py b/customer_portal/src/epilot/models/operations/getpublicportalwidgets.py
new file mode 100755
index 000000000..04d563915
--- /dev/null
+++ b/customer_portal/src/epilot/models/operations/getpublicportalwidgets.py
@@ -0,0 +1,34 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import requests as requests_http
+from ..shared import errorresp as shared_errorresp
+from ..shared import origin as shared_origin
+from ..shared import upsertportalwidget as shared_upsertportalwidget
+from typing import Optional
+
+
+@dataclasses.dataclass
+class GetPublicPortalWidgetsRequest:
+ org_id: str = dataclasses.field(metadata={'query_param': { 'field_name': 'org_id', 'style': 'form', 'explode': True }})
+ origin: shared_origin.Origin = dataclasses.field(metadata={'query_param': { 'field_name': 'origin', 'style': 'form', 'explode': True }})
+ r"""Origin of the portal"""
+
+
+
+
+@dataclasses.dataclass
+class GetPublicPortalWidgetsResponse:
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
+ error_resp: Optional[shared_errorresp.ErrorResp] = dataclasses.field(default=None)
+ r"""Could not authenticate the user"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
+ upsert_portal_widget: Optional[shared_upsertportalwidget.UpsertPortalWidget] = dataclasses.field(default=None)
+ r"""Retrieved the portal public widgets successfully."""
+
+
diff --git a/customer_portal/src/epilot/models/operations/getschemas.py b/customer_portal/src/epilot/models/operations/getschemas.py
index a041beb91..8dfef1489 100755
--- a/customer_portal/src/epilot/models/operations/getschemas.py
+++ b/customer_portal/src/epilot/models/operations/getschemas.py
@@ -3,31 +3,40 @@
from __future__ import annotations
import dataclasses
import requests as requests_http
+from ..shared import errorresp as shared_errorresp
+from ..shared import schema as shared_schema
from dataclasses_json import Undefined, dataclass_json
from epilot import utils
-from typing import Any, Optional
+from typing import List, Optional
@dataclasses.dataclass
class GetSchemasSecurity:
+ portal_auth: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
- portal_auth: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
-
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class GetSchemas200ApplicationJSON:
- r"""Success"""
-
- schemas: Optional[list[dict[str, Any]]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('schemas'), 'exclude': lambda f: f is None }})
+ r"""Retrieved schemas for an organization successfully."""
+ schemas: Optional[List[shared_schema.Schema]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('schemas'), 'exclude': lambda f: f is None }})
+
+
@dataclasses.dataclass
class GetSchemasResponse:
-
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
+ error_resp: Optional[shared_errorresp.ErrorResp] = dataclasses.field(default=None)
+ r"""Could not authenticate the user"""
get_schemas_200_application_json_object: Optional[GetSchemas200ApplicationJSON] = dataclasses.field(default=None)
- r"""Success"""
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
-
\ No newline at end of file
+ r"""Retrieved schemas for an organization successfully."""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
+
+
diff --git a/customer_portal/src/epilot/models/operations/getvalidsecondaryattributes.py b/customer_portal/src/epilot/models/operations/getvalidsecondaryattributes.py
index e2eac41d2..43fc7f3ec 100755
--- a/customer_portal/src/epilot/models/operations/getvalidsecondaryattributes.py
+++ b/customer_portal/src/epilot/models/operations/getvalidsecondaryattributes.py
@@ -3,39 +3,50 @@
from __future__ import annotations
import dataclasses
import requests as requests_http
+from ..shared import errorresp as shared_errorresp
from dataclasses_json import Undefined, dataclass_json
from epilot import utils
-from typing import Optional
+from typing import List, Optional
@dataclasses.dataclass
class GetValidSecondaryAttributesSecurity:
+ epilot_auth: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
- epilot_auth: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
-
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class GetValidSecondaryAttributes200ApplicationJSONData:
+ name: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name'), 'exclude': lambda f: f is None }})
+ r"""Name of the secondary attribute"""
+ type: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }})
+ r"""Type of the secondary attribute"""
- name: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name'), 'exclude': lambda f: f is None }})
- type: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }})
-
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class GetValidSecondaryAttributes200ApplicationJSON:
- r"""The returned count of contact"""
-
- data: Optional[list[GetValidSecondaryAttributes200ApplicationJSONData]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('data'), 'exclude': lambda f: f is None }})
+ r"""Valid secondary attributes for the contact entity are returned successfully."""
+ data: Optional[List[GetValidSecondaryAttributes200ApplicationJSONData]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('data'), 'exclude': lambda f: f is None }})
+
+
@dataclasses.dataclass
class GetValidSecondaryAttributesResponse:
-
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
+ error_resp: Optional[shared_errorresp.ErrorResp] = dataclasses.field(default=None)
+ r"""Could not authenticate the user"""
get_valid_secondary_attributes_200_application_json_object: Optional[GetValidSecondaryAttributes200ApplicationJSON] = dataclasses.field(default=None)
- r"""The returned count of contact"""
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
-
\ No newline at end of file
+ r"""Valid secondary attributes for the contact entity are returned successfully."""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
+
+
diff --git a/customer_portal/src/epilot/models/operations/logintoportalasuser.py b/customer_portal/src/epilot/models/operations/logintoportalasuser.py
new file mode 100755
index 000000000..49cc70e1d
--- /dev/null
+++ b/customer_portal/src/epilot/models/operations/logintoportalasuser.py
@@ -0,0 +1,52 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import requests as requests_http
+from ..shared import origin as shared_origin
+from dataclasses_json import Undefined, dataclass_json
+from epilot import utils
+from typing import Optional
+
+
+@dataclasses.dataclass
+class LoginToPortalAsUserSecurity:
+ epilot_auth: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
+
+
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class LoginToPortalAsUserRequestBody:
+ r"""The request body to log in to a portal impersonating a user"""
+ email: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('email'), 'exclude': lambda f: f is None }})
+ r"""The email address of the user to log in as"""
+ origin: Optional[shared_origin.Origin] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('origin'), 'exclude': lambda f: f is None }})
+ r"""Origin of the portal"""
+
+
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class LoginToPortalAsUser200ApplicationJSON:
+ r"""The token has been generated successfully."""
+ login_as_token: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('login_as_token'), 'exclude': lambda f: f is None }})
+ r"""A generated login_as_token to log in to a portal impersonating a user."""
+
+
+
+
+@dataclasses.dataclass
+class LoginToPortalAsUserResponse:
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
+ login_to_portal_as_user_200_application_json_object: Optional[LoginToPortalAsUser200ApplicationJSON] = dataclasses.field(default=None)
+ r"""The token has been generated successfully."""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
+
+
diff --git a/customer_portal/src/epilot/models/operations/replaceecptemplatevariables.py b/customer_portal/src/epilot/models/operations/replaceecptemplatevariables.py
index 9134fd33f..4469ea32b 100755
--- a/customer_portal/src/epilot/models/operations/replaceecptemplatevariables.py
+++ b/customer_portal/src/epilot/models/operations/replaceecptemplatevariables.py
@@ -3,7 +3,7 @@
from __future__ import annotations
import dataclasses
import requests as requests_http
-from ..shared import origin_enum as shared_origin_enum
+from ..shared import errorresp as shared_errorresp
from dataclasses_json import Undefined, dataclass_json
from epilot import utils
from typing import Optional
@@ -11,48 +11,58 @@
@dataclasses.dataclass
class ReplaceECPTemplateVariablesSecurity:
+ epilot_auth: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
- epilot_auth: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
-
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class ReplaceECPTemplateVariablesRequestBody:
r"""ECPVariables payload"""
+ contact_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('contactId'), 'exclude': lambda f: f is None }})
+ r"""ID of the contact"""
- contact_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('contactId'), 'exclude': lambda f: f is None }})
-
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
-class ReplaceECPTemplateVariablesRequest:
-
- origin: shared_origin_enum.OriginEnum = dataclasses.field(metadata={'query_param': { 'field_name': 'origin', 'style': 'form', 'explode': True }})
- r"""Origin of the portal"""
- request_body: ReplaceECPTemplateVariablesRequestBody = dataclasses.field(metadata={'request': { 'media_type': 'application/json' }})
- r"""ECPVariables payload"""
+class ReplaceECPTemplateVariables200ApplicationJSONCustomerPortal:
+ invitation_link: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('invitationLink'), 'exclude': lambda f: f is None }})
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
-class ReplaceECPTemplateVariables200ApplicationJSONPortalUser:
-
- invitation_link: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('invitationLink'), 'exclude': lambda f: f is None }})
+class ReplaceECPTemplateVariables200ApplicationJSONInstallerPortal:
+ invitation_link: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('invitationLink'), 'exclude': lambda f: f is None }})
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class ReplaceECPTemplateVariables200ApplicationJSON:
- r"""ok"""
-
- portal_user: Optional[ReplaceECPTemplateVariables200ApplicationJSONPortalUser] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('portalUser'), 'exclude': lambda f: f is None }})
+ r"""Replaced portal template variables successfully."""
+ customer_portal: Optional[ReplaceECPTemplateVariables200ApplicationJSONCustomerPortal] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('customerPortal'), 'exclude': lambda f: f is None }})
+ installer_portal: Optional[ReplaceECPTemplateVariables200ApplicationJSONInstallerPortal] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('installerPortal'), 'exclude': lambda f: f is None }})
+
+
@dataclasses.dataclass
class ReplaceECPTemplateVariablesResponse:
-
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
+ error_resp: Optional[shared_errorresp.ErrorResp] = dataclasses.field(default=None)
+ r"""Could not authenticate the user"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
replace_ecp_template_variables_200_application_json_object: Optional[ReplaceECPTemplateVariables200ApplicationJSON] = dataclasses.field(default=None)
- r"""ok"""
-
\ No newline at end of file
+ r"""Replaced portal template variables successfully."""
+
+
diff --git a/customer_portal/src/epilot/models/operations/saveentityfile.py b/customer_portal/src/epilot/models/operations/saveentityfile.py
index 59d96e6c1..24c44c10b 100755
--- a/customer_portal/src/epilot/models/operations/saveentityfile.py
+++ b/customer_portal/src/epilot/models/operations/saveentityfile.py
@@ -3,31 +3,40 @@
from __future__ import annotations
import dataclasses
import requests as requests_http
+from ..shared import errorresp as shared_errorresp
+from ..shared import file as shared_file
from dataclasses_json import Undefined, dataclass_json
from epilot import utils
-from typing import Any, Optional
+from typing import List, Optional
@dataclasses.dataclass
class SaveEntityFileSecurity:
+ portal_auth: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
- portal_auth: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
-
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
-class SaveEntityFile200ApplicationJSON:
- r"""The returned File Entities"""
-
- created_files: Optional[list[dict[str, Any]]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('createdFiles'), 'exclude': lambda f: f is None }})
+class SaveEntityFile201ApplicationJSON:
+ r"""The files have been saved to the entitiy successfully."""
+ created_files: Optional[List[shared_file.File]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('createdFiles'), 'exclude': lambda f: f is None }})
+
+
@dataclasses.dataclass
class SaveEntityFileResponse:
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
+ error_resp: Optional[shared_errorresp.ErrorResp] = dataclasses.field(default=None)
+ r"""The request could not be validated"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
+ save_entity_file_201_application_json_object: Optional[SaveEntityFile201ApplicationJSON] = dataclasses.field(default=None)
+ r"""The files have been saved to the entitiy successfully."""
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
- save_entity_file_200_application_json_object: Optional[SaveEntityFile200ApplicationJSON] = dataclasses.field(default=None)
- r"""The returned File Entities"""
-
\ No newline at end of file
+
diff --git a/customer_portal/src/epilot/models/operations/saveportalfiles.py b/customer_portal/src/epilot/models/operations/saveportalfiles.py
index bfff6ce4c..37e1f7174 100755
--- a/customer_portal/src/epilot/models/operations/saveportalfiles.py
+++ b/customer_portal/src/epilot/models/operations/saveportalfiles.py
@@ -3,21 +3,40 @@
from __future__ import annotations
import dataclasses
import requests as requests_http
-from typing import Any, Optional
+from ..shared import errorresp as shared_errorresp
+from ..shared import file as shared_file
+from dataclasses_json import Undefined, dataclass_json
+from epilot import utils
+from typing import List, Optional
@dataclasses.dataclass
class SavePortalFilesSecurity:
+ epilot_auth: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
- epilot_auth: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
+
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SavePortalFiles201ApplicationJSON:
+ r"""The files have been saved to the portal successfully."""
+ created_files: Optional[List[shared_file.File]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('createdFiles'), 'exclude': lambda f: f is None }})
+
+
@dataclasses.dataclass
class SavePortalFilesResponse:
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
+ error_resp: Optional[shared_errorresp.ErrorResp] = dataclasses.field(default=None)
+ r"""The request could not be validated"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
+ save_portal_files_201_application_json_object: Optional[SavePortalFiles201ApplicationJSON] = dataclasses.field(default=None)
+ r"""The files have been saved to the portal successfully."""
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
- entity_item: Optional[dict[str, Any]] = dataclasses.field(default=None)
- r"""The returned portal files"""
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
-
\ No newline at end of file
+
diff --git a/customer_portal/src/epilot/models/operations/testauth.py b/customer_portal/src/epilot/models/operations/testauth.py
deleted file mode 100755
index f42275986..000000000
--- a/customer_portal/src/epilot/models/operations/testauth.py
+++ /dev/null
@@ -1,15 +0,0 @@
-"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
-
-from __future__ import annotations
-import dataclasses
-import requests as requests_http
-from typing import Optional
-
-
-@dataclasses.dataclass
-class TestAuthResponse:
-
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
-
\ No newline at end of file
diff --git a/customer_portal/src/epilot/models/operations/trackfiledownloaded.py b/customer_portal/src/epilot/models/operations/trackfiledownloaded.py
new file mode 100755
index 000000000..1f50f406a
--- /dev/null
+++ b/customer_portal/src/epilot/models/operations/trackfiledownloaded.py
@@ -0,0 +1,50 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import requests as requests_http
+from ..shared import errorresp as shared_errorresp
+from ..shared import fileitem as shared_fileitem
+from dataclasses_json import Undefined, dataclass_json
+from epilot import utils
+from typing import Optional
+
+
+@dataclasses.dataclass
+class TrackFileDownloadedSecurity:
+ portal_auth: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
+
+
+
+
+@dataclasses.dataclass
+class TrackFileDownloadedRequest:
+ id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'id', 'style': 'simple', 'explode': False }})
+ r"""The Id of a file"""
+
+
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class TrackFileDownloaded200ApplicationJSON:
+ r"""File download tracked successfully."""
+ file: Optional[shared_fileitem.FileItem] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('file'), 'exclude': lambda f: f is None }})
+
+
+
+
+@dataclasses.dataclass
+class TrackFileDownloadedResponse:
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
+ error_resp: Optional[shared_errorresp.ErrorResp] = dataclasses.field(default=None)
+ r"""Could not authenticate the user"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
+ track_file_downloaded_200_application_json_object: Optional[TrackFileDownloaded200ApplicationJSON] = dataclasses.field(default=None)
+ r"""File download tracked successfully."""
+
+
diff --git a/customer_portal/src/epilot/models/operations/triggerentityaccess.py b/customer_portal/src/epilot/models/operations/triggerentityaccess.py
new file mode 100755
index 000000000..169640625
--- /dev/null
+++ b/customer_portal/src/epilot/models/operations/triggerentityaccess.py
@@ -0,0 +1,49 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import requests as requests_http
+from dataclasses_json import Undefined, dataclass_json
+from epilot import utils
+from typing import Optional
+
+
+@dataclasses.dataclass
+class TriggerEntityAccessSecurity:
+ portal_auth: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
+
+
+
+
+@dataclasses.dataclass
+class TriggerEntityAccessRequest:
+ entity_id: Optional[str] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'entity_id', 'style': 'form', 'explode': True }})
+ r"""entity ID"""
+ schema: Optional[str] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'schema', 'style': 'form', 'explode': True }})
+ r"""entity schema"""
+
+
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class TriggerEntityAccess200ApplicationJSON:
+ r"""The event has been triggered successfully."""
+ event_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('eventId'), 'exclude': lambda f: f is None }})
+ r"""Event ID"""
+
+
+
+
+@dataclasses.dataclass
+class TriggerEntityAccessResponse:
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
+ trigger_entity_access_200_application_json_object: Optional[TriggerEntityAccess200ApplicationJSON] = dataclasses.field(default=None)
+ r"""The event has been triggered successfully."""
+
+
diff --git a/customer_portal/src/epilot/models/operations/updatecontact.py b/customer_portal/src/epilot/models/operations/updatecontact.py
index ef158bb7e..a518a0149 100755
--- a/customer_portal/src/epilot/models/operations/updatecontact.py
+++ b/customer_portal/src/epilot/models/operations/updatecontact.py
@@ -3,21 +3,51 @@
from __future__ import annotations
import dataclasses
import requests as requests_http
-from typing import Any, Optional
+from ..shared import contact as shared_contact
+from ..shared import errorresp as shared_errorresp
+from ..shared import failedruleerrorresp as shared_failedruleerrorresp
+from dataclasses_json import Undefined, dataclass_json
+from epilot import utils
+from typing import Optional, Union
@dataclasses.dataclass
class UpdateContactSecurity:
+ portal_auth: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
- portal_auth: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
+
+
+
+@dataclasses.dataclass
+class UpdateContact403ApplicationJSON:
+ r"""The user is not allowed to access this resource"""
+
+
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class UpdateContact200ApplicationJSON:
+ r"""Updated the contact details successfully."""
+ data: Optional[shared_contact.Contact] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('data'), 'exclude': lambda f: f is None }})
+ r"""The mapped contact of the portal user"""
+
+
@dataclasses.dataclass
class UpdateContactResponse:
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
+ error_resp: Optional[shared_errorresp.ErrorResp] = dataclasses.field(default=None)
+ r"""Could not authenticate the user"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
+ update_contact_200_application_json_object: Optional[UpdateContact200ApplicationJSON] = dataclasses.field(default=None)
+ r"""Updated the contact details successfully."""
+ update_contact_403_application_json_one_of: Optional[Union[shared_errorresp.ErrorResp, shared_failedruleerrorresp.FailedRuleErrorResp]] = dataclasses.field(default=None)
+ r"""The user is not allowed to access this resource"""
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
- entity_item: Optional[dict[str, Any]] = dataclasses.field(default=None)
- r"""The returned contact"""
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
-
\ No newline at end of file
+
diff --git a/customer_portal/src/epilot/models/operations/updatecontract.py b/customer_portal/src/epilot/models/operations/updatecontract.py
index 221db1885..4c0b85d33 100755
--- a/customer_portal/src/epilot/models/operations/updatecontract.py
+++ b/customer_portal/src/epilot/models/operations/updatecontract.py
@@ -3,40 +3,61 @@
from __future__ import annotations
import dataclasses
import requests as requests_http
+from ..shared import contract as shared_contract
+from ..shared import errorresp as shared_errorresp
+from ..shared import failedruleerrorresp as shared_failedruleerrorresp
from dataclasses_json import Undefined, dataclass_json
from epilot import utils
-from typing import Any, Optional
+from typing import Any, Dict, Optional, Union
@dataclasses.dataclass
class UpdateContractSecurity:
+ portal_auth: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
- portal_auth: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
-
+
+
@dataclasses.dataclass
class UpdateContractRequest:
-
id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'id', 'style': 'simple', 'explode': False }})
- r"""The Id of the contract"""
- request_body: dict[str, Any] = dataclasses.field(metadata={'request': { 'media_type': 'application/json' }})
- r"""Updated Contract body"""
+ r"""The ID of the contract"""
+ request_body: Dict[str, Any] = dataclasses.field(metadata={'request': { 'media_type': 'application/json' }})
+ r"""Requested contract body to update"""
+
+
+
+
+@dataclasses.dataclass
+class UpdateContract403ApplicationJSON:
+ r"""The user is not allowed to access this resource"""
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class UpdateContract200ApplicationJSON:
- r"""The returned updated contract"""
-
- data: Optional[dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('data'), 'exclude': lambda f: f is None }})
+ r"""Updated the contract successfully."""
+ data: Optional[shared_contract.Contract] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('data'), 'exclude': lambda f: f is None }})
+ r"""The contract entity"""
+
+
@dataclasses.dataclass
class UpdateContractResponse:
-
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
+ error_resp: Optional[shared_errorresp.ErrorResp] = dataclasses.field(default=None)
+ r"""Could not authenticate the user"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
update_contract_200_application_json_object: Optional[UpdateContract200ApplicationJSON] = dataclasses.field(default=None)
- r"""The returned updated contract"""
-
\ No newline at end of file
+ r"""Updated the contract successfully."""
+ update_contract_403_application_json_one_of: Optional[Union[shared_errorresp.ErrorResp, shared_failedruleerrorresp.FailedRuleErrorResp]] = dataclasses.field(default=None)
+ r"""The user is not allowed to access this resource"""
+
+
diff --git a/customer_portal/src/epilot/models/operations/updateopportunity.py b/customer_portal/src/epilot/models/operations/updateopportunity.py
index 6d332f19f..71a711429 100755
--- a/customer_portal/src/epilot/models/operations/updateopportunity.py
+++ b/customer_portal/src/epilot/models/operations/updateopportunity.py
@@ -3,40 +3,51 @@
from __future__ import annotations
import dataclasses
import requests as requests_http
+from ..shared import errorresp as shared_errorresp
+from ..shared import opportunity as shared_opportunity
from dataclasses_json import Undefined, dataclass_json
from epilot import utils
-from typing import Any, Optional
+from typing import Any, Dict, Optional
@dataclasses.dataclass
class UpdateOpportunitySecurity:
+ portal_auth: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
- portal_auth: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
-
+
+
@dataclasses.dataclass
class UpdateOpportunityRequest:
-
id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'id', 'style': 'simple', 'explode': False }})
- r"""The Id of opportunities"""
- request_body: dict[str, Any] = dataclasses.field(metadata={'request': { 'media_type': 'application/json' }})
- r"""Updated opportunity body"""
+ r"""The ID of opportunity"""
+ request_body: Dict[str, Any] = dataclasses.field(metadata={'request': { 'media_type': 'application/json' }})
+ r"""Requested opportunity body to update"""
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class UpdateOpportunity200ApplicationJSON:
- r"""The returned opportunity"""
-
- data: Optional[dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('data'), 'exclude': lambda f: f is None }})
+ r"""Updated the opportunity successfully."""
+ data: Optional[shared_opportunity.Opportunity] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('data'), 'exclude': lambda f: f is None }})
+ r"""The opportunity entity"""
+
+
@dataclasses.dataclass
class UpdateOpportunityResponse:
-
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
+ error_resp: Optional[shared_errorresp.ErrorResp] = dataclasses.field(default=None)
+ r"""Could not authenticate the user"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
update_opportunity_200_application_json_object: Optional[UpdateOpportunity200ApplicationJSON] = dataclasses.field(default=None)
- r"""The returned opportunity"""
-
\ No newline at end of file
+ r"""Updated the opportunity successfully."""
+
+
diff --git a/customer_portal/src/epilot/models/operations/updateorder.py b/customer_portal/src/epilot/models/operations/updateorder.py
index 37689d9c3..20e998c4f 100755
--- a/customer_portal/src/epilot/models/operations/updateorder.py
+++ b/customer_portal/src/epilot/models/operations/updateorder.py
@@ -3,29 +3,50 @@
from __future__ import annotations
import dataclasses
import requests as requests_http
-from typing import Any, Optional
+from ..shared import errorresp as shared_errorresp
+from ..shared import order as shared_order
+from dataclasses_json import Undefined, dataclass_json
+from epilot import utils
+from typing import Any, Dict, Optional
@dataclasses.dataclass
class UpdateOrderSecurity:
+ portal_auth: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
- portal_auth: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
-
+
+
@dataclasses.dataclass
class UpdateOrderRequest:
-
id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'id', 'style': 'simple', 'explode': False }})
- r"""The Id of order"""
- request_body: Optional[dict[str, Any]] = dataclasses.field(default=None, metadata={'request': { 'media_type': 'application/json' }})
+ r"""The ID of order"""
+ request_body: Optional[Dict[str, Any]] = dataclasses.field(default=None, metadata={'request': { 'media_type': 'application/json' }})
+
+
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class UpdateOrder200ApplicationJSON:
+ r"""Updated the order details successfully."""
+ data: Optional[shared_order.Order] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('data'), 'exclude': lambda f: f is None }})
+ r"""The order entity"""
+
+
@dataclasses.dataclass
class UpdateOrderResponse:
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
+ error_resp: Optional[shared_errorresp.ErrorResp] = dataclasses.field(default=None)
+ r"""Could not authenticate the user"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
+ update_order_200_application_json_object: Optional[UpdateOrder200ApplicationJSON] = dataclasses.field(default=None)
+ r"""Updated the order details successfully."""
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
- entity_item: Optional[dict[str, Any]] = dataclasses.field(default=None)
- r"""The returned order"""
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
-
\ No newline at end of file
+
diff --git a/customer_portal/src/epilot/models/operations/updateportaluser.py b/customer_portal/src/epilot/models/operations/updateportaluser.py
index b97cbb758..fa6e49c2e 100755
--- a/customer_portal/src/epilot/models/operations/updateportaluser.py
+++ b/customer_portal/src/epilot/models/operations/updateportaluser.py
@@ -3,21 +3,41 @@
from __future__ import annotations
import dataclasses
import requests as requests_http
-from typing import Any, Optional
+from ..shared import errorresp as shared_errorresp
+from ..shared import portaluser as shared_portaluser
+from dataclasses_json import Undefined, dataclass_json
+from epilot import utils
+from typing import Optional
@dataclasses.dataclass
class UpdatePortalUserSecurity:
+ portal_auth: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
- portal_auth: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
+
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class UpdatePortalUser200ApplicationJSON:
+ r"""The portal user updated successfully."""
+ data: Optional[shared_portaluser.PortalUser] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('data'), 'exclude': lambda f: f is None }})
+ r"""The portal user entity"""
+
+
@dataclasses.dataclass
class UpdatePortalUserResponse:
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
+ error_resp: Optional[shared_errorresp.ErrorResp] = dataclasses.field(default=None)
+ r"""Could not authenticate the user"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
+ update_portal_user_200_application_json_object: Optional[UpdatePortalUser200ApplicationJSON] = dataclasses.field(default=None)
+ r"""The portal user updated successfully."""
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
- entity_item: Optional[dict[str, Any]] = dataclasses.field(default=None)
- r"""The returned portal user"""
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
-
\ No newline at end of file
+
diff --git a/customer_portal/src/epilot/models/operations/upsertemailtemplates.py b/customer_portal/src/epilot/models/operations/upsertemailtemplates.py
index 2c024c279..1c0d85e46 100755
--- a/customer_portal/src/epilot/models/operations/upsertemailtemplates.py
+++ b/customer_portal/src/epilot/models/operations/upsertemailtemplates.py
@@ -4,42 +4,56 @@
import dataclasses
import requests as requests_http
from ..shared import emailtemplates as shared_emailtemplates
-from ..shared import origin_enum as shared_origin_enum
+from ..shared import errorresp as shared_errorresp
+from ..shared import origin as shared_origin
from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
from epilot import utils
from typing import Optional
@dataclasses.dataclass
class UpsertEmailTemplatesSecurity:
+ epilot_auth: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
- epilot_auth: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
-
+
+
@dataclasses.dataclass
class UpsertEmailTemplatesRequest:
-
email_templates: shared_emailtemplates.EmailTemplates = dataclasses.field(metadata={'request': { 'media_type': 'application/json' }})
- r"""Portal payload"""
- origin: shared_origin_enum.OriginEnum = dataclasses.field(metadata={'query_param': { 'field_name': 'origin', 'style': 'form', 'explode': True }})
- r"""Origin of the portal"""
+ r"""Email templates payload"""
+ origin: shared_origin.Origin = dataclasses.field(metadata={'query_param': { 'field_name': 'origin', 'style': 'form', 'explode': True }})
+ r"""Origin of the portal"""
+
+class UpsertEmailTemplates200ApplicationJSONMessage(str, Enum):
+ EMAIL_TEMPLATES_UPSERTED_SUCCESSFULLY = 'Email Templates upserted successfully'
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class UpsertEmailTemplates200ApplicationJSON:
- r"""ok"""
-
- email_templates: Optional[shared_emailtemplates.EmailTemplates] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('emailTemplates'), 'exclude': lambda f: f is None }})
- message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('message'), 'exclude': lambda f: f is None }})
+ r"""Upserted email templates of the portal successfully."""
+ email_templates: shared_emailtemplates.EmailTemplates = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('emailTemplates') }})
+ r"""Email templates used for authentication and internal processes"""
+ message: UpsertEmailTemplates200ApplicationJSONMessage = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('message') }})
+
+
@dataclasses.dataclass
class UpsertEmailTemplatesResponse:
-
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
+ error_resp: Optional[shared_errorresp.ErrorResp] = dataclasses.field(default=None)
+ r"""Could not authenticate the user"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
upsert_email_templates_200_application_json_object: Optional[UpsertEmailTemplates200ApplicationJSON] = dataclasses.field(default=None)
- r"""ok"""
-
\ No newline at end of file
+ r"""Upserted email templates of the portal successfully."""
+
+
diff --git a/customer_portal/src/epilot/models/operations/upsertportal.py b/customer_portal/src/epilot/models/operations/upsertportal.py
index 11e14465d..7e4d01605 100755
--- a/customer_portal/src/epilot/models/operations/upsertportal.py
+++ b/customer_portal/src/epilot/models/operations/upsertportal.py
@@ -3,36 +3,41 @@
from __future__ import annotations
import dataclasses
import requests as requests_http
-from ..shared import addportalresp as shared_addportalresp
from ..shared import errorresp as shared_errorresp
-from ..shared import origin_enum as shared_origin_enum
+from ..shared import origin as shared_origin
+from ..shared import portalconfig as shared_portalconfig
from ..shared import upsertportalconfig as shared_upsertportalconfig
from typing import Optional
@dataclasses.dataclass
class UpsertPortalSecurity:
+ epilot_auth: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
- epilot_auth: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
-
+
+
@dataclasses.dataclass
class UpsertPortalRequest:
-
+ origin: shared_origin.Origin = dataclasses.field(metadata={'query_param': { 'field_name': 'origin', 'style': 'form', 'explode': True }})
+ r"""Origin of the portal"""
upsert_portal_config: shared_upsertportalconfig.UpsertPortalConfig = dataclasses.field(metadata={'request': { 'media_type': 'application/json' }})
- r"""Portal payload"""
- origin: Optional[shared_origin_enum.OriginEnum] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'origin', 'style': 'form', 'explode': True }})
- r"""Origin of the portal"""
+ r"""Portal payload"""
+
+
@dataclasses.dataclass
class UpsertPortalResponse:
-
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
- add_portal_resp: Optional[shared_addportalresp.AddPortalResp] = dataclasses.field(default=None)
- r"""Success - portal created with success."""
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
error_resp: Optional[shared_errorresp.ErrorResp] = dataclasses.field(default=None)
- r"""Validation Errors"""
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
-
\ No newline at end of file
+ r"""The request could not be validated"""
+ portal_config: Optional[shared_portalconfig.PortalConfig] = dataclasses.field(default=None)
+ r"""Portal upserted successfully."""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
+
+
diff --git a/customer_portal/src/epilot/models/operations/upsertportalwidget.py b/customer_portal/src/epilot/models/operations/upsertportalwidget.py
new file mode 100755
index 000000000..e6b46abd4
--- /dev/null
+++ b/customer_portal/src/epilot/models/operations/upsertportalwidget.py
@@ -0,0 +1,42 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import requests as requests_http
+from ..shared import errorresp as shared_errorresp
+from ..shared import origin as shared_origin
+from ..shared import upsertportalwidget as shared_upsertportalwidget
+from typing import Optional
+
+
+@dataclasses.dataclass
+class UpsertPortalWidgetSecurity:
+ epilot_auth: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
+
+
+
+
+@dataclasses.dataclass
+class UpsertPortalWidgetRequest:
+ origin: shared_origin.Origin = dataclasses.field(metadata={'query_param': { 'field_name': 'origin', 'style': 'form', 'explode': True }})
+ r"""Origin of the portal"""
+ upsert_portal_widget: shared_upsertportalwidget.UpsertPortalWidget = dataclasses.field(metadata={'request': { 'media_type': 'application/json' }})
+ r"""Portal widgets payload"""
+
+
+
+
+@dataclasses.dataclass
+class UpsertPortalWidgetResponse:
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
+ error_resp: Optional[shared_errorresp.ErrorResp] = dataclasses.field(default=None)
+ r"""The request could not be validated"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
+ upsert_portal_widget: Optional[shared_upsertportalwidget.UpsertPortalWidget] = dataclasses.field(default=None)
+ r"""Portal widget configuration upserted successfully."""
+
+
diff --git a/customer_portal/src/epilot/models/operations/userexists.py b/customer_portal/src/epilot/models/operations/userexists.py
index 340e593b4..bc4ded833 100755
--- a/customer_portal/src/epilot/models/operations/userexists.py
+++ b/customer_portal/src/epilot/models/operations/userexists.py
@@ -3,43 +3,47 @@
from __future__ import annotations
import dataclasses
import requests as requests_http
+from ..shared import errorresp as shared_errorresp
+from ..shared import origin as shared_origin
+from ..shared import portaluser as shared_portaluser
from dataclasses_json import Undefined, dataclass_json
from epilot import utils
-from typing import Any, Optional
+from typing import Optional
@dataclasses.dataclass
class UserExistsRequest:
-
- email: str = dataclasses.field(metadata={'query_param': { 'field_name': 'email', 'style': 'form', 'explode': True }})
- org_id: str = dataclasses.field(metadata={'query_param': { 'field_name': 'org_id', 'style': 'form', 'explode': True }})
+ email: str = dataclasses.field(metadata={'query_param': { 'field_name': 'email', 'style': 'form', 'explode': True }})
+ org_id: str = dataclasses.field(metadata={'query_param': { 'field_name': 'org_id', 'style': 'form', 'explode': True }})
+ origin: Optional[shared_origin.Origin] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'origin', 'style': 'form', 'explode': True }})
+ r"""Checkes if user exists in the given portal origin. If not provided, checks in all origins."""
-@dataclass_json(undefined=Undefined.EXCLUDE)
-@dataclasses.dataclass
-class UserExists404ApplicationJSON:
- r"""User does not exist in the portal"""
-
- exists: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('exists'), 'exclude': lambda f: f is None }})
-
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class UserExists200ApplicationJSON:
- r"""User exists in the portal"""
-
- exists: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('exists'), 'exclude': lambda f: f is None }})
- user: Optional[dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('user'), 'exclude': lambda f: f is None }})
+ r"""Returned whether the user exists in the portal or not successfully."""
+ exists: bool = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('exists') }})
+ r"""Whether the user exists in the portal"""
+ user: Optional[shared_portaluser.PortalUser] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('user'), 'exclude': lambda f: f is None }})
+ r"""The portal user entity"""
+
+
@dataclasses.dataclass
class UserExistsResponse:
-
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
+ error_resp: Optional[shared_errorresp.ErrorResp] = dataclasses.field(default=None)
+ r"""Internal Server Error"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
user_exists_200_application_json_object: Optional[UserExists200ApplicationJSON] = dataclasses.field(default=None)
- r"""User exists in the portal"""
- user_exists_404_application_json_object: Optional[UserExists404ApplicationJSON] = dataclasses.field(default=None)
- r"""User does not exist in the portal"""
-
\ No newline at end of file
+ r"""Returned whether the user exists in the portal or not successfully."""
+
+
diff --git a/customer_portal/src/epilot/models/shared/__init__.py b/customer_portal/src/epilot/models/shared/__init__.py
index 7f1a3c2d7..036527e0e 100755
--- a/customer_portal/src/epilot/models/shared/__init__.py
+++ b/customer_portal/src/epilot/models/shared/__init__.py
@@ -1,18 +1,46 @@
"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
-from .addportalresp import *
+from .actionwidget import *
+from .activity import *
+from .activitycallercontext import *
+from .activityitem import *
+from .adminuser import *
+from .balance import *
+from .billingevent import *
+from .contact import *
+from .contactcountrequest import *
+from .contentwidget import *
+from .contract import *
+from .createssouserrequest import *
+from .createuserrequest import *
from .deleteentityfile import *
from .emailtemplates import *
+from .entityfilecount import *
+from .entityitem import *
+from .entityslug import *
+from .entitywidget import *
from .errorresp import *
from .extraschemaattributes import *
+from .failedruleerrorresp import *
+from .file import *
+from .fileitem import *
from .grant import *
+from .installmentevent import *
+from .opportunity import *
+from .order import *
from .organizationsettings import *
-from .origin_enum import *
+from .origin import *
from .portalconfig import *
+from .portaluser import *
+from .product import *
from .saveentityfile import *
from .saveportalfile import *
+from .schema import *
from .security import *
+from .teaserwidget import *
from .upsertportalconfig import *
-from .useractivationpayload import *
+from .upsertportalwidget import *
+from .widgetaction import *
+from .widgetbase import *
-__all__ = ["AddPortalResp","DeleteEntityFile","EmailTemplates","ErrorResp","ExtraSchemaAttributes","Grant","GrantEffectEnum","OrganizationSettings","OrganizationSettingsAutomationEntityMapping","OrganizationSettingsAutomationPreview","OrganizationSettingsCentralInboxPreviewSetting","OrganizationSettingsContractsPreviewSetting","OrganizationSettingsDisableIvy","OrganizationSettingsDoubleOptIn","OrganizationSettingsEcommerceCatalogPreview","OrganizationSettingsEcommerceOpportunitiesPreview","OrganizationSettingsEcommercePreview","OrganizationSettingsEndCustomerPortal","OrganizationSettingsEntitySchemaBuilder","OrganizationSettingsLogicEditorPreview","OrganizationSettingsNewNavigation","OrganizationSettingsPartnering","OrganizationSettingsProductAvailability","OrganizationSettingsSso","OrganizationSettingsSubmissionPreview","OrganizationSettingsUserRolesPreview","OriginEnum","PortalConfig","PortalConfigCognitoDetails","PortalConfigEmailTemplates","PortalConfigEntityActions","PortalConfigEntityActionsActionLabel","PortalConfigEntityIdentifiers","PortalConfigImages","SaveEntityFile","SaveEntityFileFiles","SaveEntityFileFilesAccessControlEnum","SaveEntityFileFilesS3ref","SavePortalFile","SavePortalFileFiles","SavePortalFileFilesS3ref","Security","UpsertPortalConfig","UpsertPortalConfigCognitoDetails","UpsertPortalConfigEmailTemplates","UpsertPortalConfigEntityActions","UpsertPortalConfigEntityActionsActionLabel","UpsertPortalConfigEntityIdentifiers","UpsertPortalConfigImages","UserActivationPayload"]
+__all__ = ["ActionWidget","ActionWidgetHeadline","ActionWidgetSubHeadline","ActionWidgetType","Activity","ActivityCallerContext","ActivityCallerContextPortalAuth","ActivityCallerContextPortalAuthToken","ActivityItem","ActivityItemPayload","ActivityItemPayloadEntity","AdminUser","AdminUserImageURI","Balance","BillingEvent","BillingEventReimbursementEvent","BillingEventReimbursementEventContract","BillingEventReimbursementEventContractDollarRelation","BillingEventReimbursementEventType","Contact","ContactCountRequest","ContactSchema","ContentWidget","ContentWidgetHeadline","ContentWidgetSubHeadline","ContentWidgetType","Contract","ContractBillingPeriod","ContractBranch","ContractNoticeTimeUnit","ContractRenewalDurationUnit","ContractStatus","CreateSSOUserRequest","CreateUserRequest","DeleteEntityFile","EmailTemplates","EntityFileCount","EntityItem","EntitySlug","EntityWidget","EntityWidgetHeadline","EntityWidgetSubHeadline","EntityWidgetType","ErrorResp","ExtraSchemaAttributes","FailedRuleErrorResp","FailedRuleErrorRespFailedRule","File","FileItem","FileItemAccessControl","FileItemRelations","FileItemSchema","FileItemType","FileSchema","Grant","GrantEffect","InstallmentEvent","InstallmentEventContract","InstallmentEventContractDollarRelation","InstallmentEventType","Opportunity","OpportunitySchema","Order","OrderSchema","OrganizationSettings","OrganizationSettingsAutomationEntityMapping","OrganizationSettingsAutomationPreview","OrganizationSettingsCentralInboxPreviewSetting","OrganizationSettingsContractsPreviewSetting","OrganizationSettingsDisableIvy","OrganizationSettingsDoubleOptIn","OrganizationSettingsEcommerceCatalogPreview","OrganizationSettingsEcommerceOpportunitiesPreview","OrganizationSettingsEcommercePreview","OrganizationSettingsEndCustomerPortal","OrganizationSettingsEntitySchemaBuilder","OrganizationSettingsInstallerPortal","OrganizationSettingsLogicEditorPreview","OrganizationSettingsNewNavigation","OrganizationSettingsPartnering","OrganizationSettingsProductAvailability","OrganizationSettingsSso","OrganizationSettingsSubmissionPreview","OrganizationSettingsUserRolesPreview","Origin","PortalConfig","PortalConfigCognitoDetails","PortalConfigDefaultUserToNotify","PortalConfigEntityActions","PortalConfigEntityActionsActionLabel","PortalConfigEntityEditRules","PortalConfigEntityEditRulesCadencePeriodType","PortalConfigEntityEditRulesRuleType","PortalConfigEntityIdentifiers","PortalConfigEntityIdentifiersType","PortalConfigFeatureSettings","PortalConfigImages","PortalConfigOrgSettings","PortalConfigOrgSettingsCanary","PortalConfigOrgSettingsReleaseCandidate","PortalConfigSelfRegistrationSetting","PortalUser","PortalUserSchema","Product","ProductSchema","SaveEntityFile","SaveEntityFileFiles","SaveEntityFileFilesAccessControl","SaveEntityFileFilesS3ref","SavePortalFile","SavePortalFileFiles","SavePortalFileFilesS3ref","Schema","Security","TeaserWidget","TeaserWidgetButton","TeaserWidgetButtonLabel","TeaserWidgetHeadline","TeaserWidgetSubHeadline","TeaserWidgetType","UpsertPortalConfig","UpsertPortalConfigCognitoDetails","UpsertPortalConfigDefaultUserToNotify","UpsertPortalConfigEntityActions","UpsertPortalConfigEntityActionsActionLabel","UpsertPortalConfigEntityEditRules","UpsertPortalConfigEntityEditRulesCadencePeriodType","UpsertPortalConfigEntityEditRulesRuleType","UpsertPortalConfigEntityIdentifiers","UpsertPortalConfigEntityIdentifiersType","UpsertPortalConfigFeatureSettings","UpsertPortalConfigImages","UpsertPortalConfigSelfRegistrationSetting","UpsertPortalWidget","WidgetAction","WidgetActionLabel","WidgetActionRules","WidgetActionType","WidgetBase","WidgetBaseHeadline","WidgetBaseSubHeadline","WidgetBaseType"]
diff --git a/customer_portal/src/epilot/models/shared/actionwidget.py b/customer_portal/src/epilot/models/shared/actionwidget.py
new file mode 100755
index 000000000..4656b1afd
--- /dev/null
+++ b/customer_portal/src/epilot/models/shared/actionwidget.py
@@ -0,0 +1,48 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from ..shared import widgetaction as shared_widgetaction
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from epilot import utils
+from typing import List, Optional
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class ActionWidgetHeadline:
+ de: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('de'), 'exclude': lambda f: f is None }})
+ en: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('en'), 'exclude': lambda f: f is None }})
+
+
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class ActionWidgetSubHeadline:
+ de: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('de'), 'exclude': lambda f: f is None }})
+ en: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('en'), 'exclude': lambda f: f is None }})
+
+
+
+class ActionWidgetType(str, Enum):
+ ACTION_WIDGET = 'ACTION_WIDGET'
+ CONTENT_WIDGET = 'CONTENT_WIDGET'
+ ENTITY_WIDGET = 'ENTITY_WIDGET'
+ TEASER_WIDGET = 'TEASER_WIDGET'
+ DOCUMENT_WIDGET = 'DOCUMENT_WIDGET'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class ActionWidget:
+ id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id') }})
+ list_index: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('listIndex') }})
+ r"""Index of the widget in the list, used for ordering (left or right)"""
+ type: ActionWidgetType = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type') }})
+ actions: Optional[List[shared_widgetaction.WidgetAction]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('actions'), 'exclude': lambda f: f is None }})
+ headline: Optional[ActionWidgetHeadline] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('headline'), 'exclude': lambda f: f is None }})
+ sub_headline: Optional[ActionWidgetSubHeadline] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('subHeadline'), 'exclude': lambda f: f is None }})
+
+
diff --git a/customer_portal/src/epilot/models/shared/activity.py b/customer_portal/src/epilot/models/shared/activity.py
new file mode 100755
index 000000000..6f7a568bf
--- /dev/null
+++ b/customer_portal/src/epilot/models/shared/activity.py
@@ -0,0 +1,20 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from epilot import utils
+from typing import Any, Dict, Optional
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class Activity:
+ message: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('message') }})
+ r"""Message for activity. Supports handlebars syntax."""
+ title: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('title') }})
+ r"""Title for activity. Supports handlebars syntax."""
+ type: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type') }})
+ payload: Optional[Dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('payload'), 'exclude': lambda f: f is None }})
+
+
diff --git a/customer_portal/src/epilot/models/shared/activitycallercontext.py b/customer_portal/src/epilot/models/shared/activitycallercontext.py
new file mode 100755
index 000000000..02d7dc15e
--- /dev/null
+++ b/customer_portal/src/epilot/models/shared/activitycallercontext.py
@@ -0,0 +1,36 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from epilot import utils
+from typing import Any, Dict, Optional
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class ActivityCallerContextPortalAuthToken:
+ cognito_username: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('cognito:username'), 'exclude': lambda f: f is None }})
+ custom_contact_entity_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('custom:contact_entity_id'), 'exclude': lambda f: f is None }})
+ custom_portal_user_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('custom:portal_user_id'), 'exclude': lambda f: f is None }})
+ email: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('email'), 'exclude': lambda f: f is None }})
+ sub: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sub'), 'exclude': lambda f: f is None }})
+
+
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class ActivityCallerContextPortalAuth:
+ token: Optional[ActivityCallerContextPortalAuthToken] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('token'), 'exclude': lambda f: f is None }})
+
+
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class ActivityCallerContext:
+ additional_properties: Optional[Dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: f is None }})
+ portal_auth: Optional[ActivityCallerContextPortalAuth] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('PortalAuth'), 'exclude': lambda f: f is None }})
+
+
diff --git a/customer_portal/src/epilot/models/shared/activityitem.py b/customer_portal/src/epilot/models/shared/activityitem.py
new file mode 100755
index 000000000..c6183a7ad
--- /dev/null
+++ b/customer_portal/src/epilot/models/shared/activityitem.py
@@ -0,0 +1,44 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import dateutil.parser
+from ..shared import activitycallercontext as shared_activitycallercontext
+from dataclasses_json import Undefined, dataclass_json
+from datetime import datetime
+from epilot import utils
+from typing import Optional
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class ActivityItemPayloadEntity:
+ id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }})
+ schema: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('schema'), 'exclude': lambda f: f is None }})
+
+
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class ActivityItemPayload:
+ caller: Optional[shared_activitycallercontext.ActivityCallerContext] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('caller'), 'exclude': lambda f: f is None }})
+ entity: Optional[ActivityItemPayloadEntity] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity'), 'exclude': lambda f: f is None }})
+
+
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class ActivityItem:
+ message: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('message') }})
+ r"""Message for activity. Supports handlebars syntax."""
+ title: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('title') }})
+ r"""Title for activity. Supports handlebars syntax."""
+ type: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type') }})
+ id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_id'), 'exclude': lambda f: f is None }})
+ r"""See https://github.com/ulid/spec"""
+ payload: Optional[ActivityItemPayload] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('payload'), 'exclude': lambda f: f is None }})
+ timestamp: Optional[datetime] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('timestamp'), 'encoder': utils.datetimeisoformat(True), 'decoder': dateutil.parser.isoparse, 'exclude': lambda f: f is None }})
+
+
diff --git a/customer_portal/src/epilot/models/shared/addportalresp.py b/customer_portal/src/epilot/models/shared/addportalresp.py
deleted file mode 100755
index 3e6eec8d7..000000000
--- a/customer_portal/src/epilot/models/shared/addportalresp.py
+++ /dev/null
@@ -1,16 +0,0 @@
-"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
-
-from __future__ import annotations
-import dataclasses
-from dataclasses_json import Undefined, dataclass_json
-from epilot import utils
-from typing import Optional
-
-
-@dataclass_json(undefined=Undefined.EXCLUDE)
-@dataclasses.dataclass
-class AddPortalResp:
- r"""Success - portal created with success."""
-
- message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('message'), 'exclude': lambda f: f is None }})
-
\ No newline at end of file
diff --git a/customer_portal/src/epilot/models/shared/adminuser.py b/customer_portal/src/epilot/models/shared/adminuser.py
new file mode 100755
index 000000000..da545367b
--- /dev/null
+++ b/customer_portal/src/epilot/models/shared/adminuser.py
@@ -0,0 +1,33 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from epilot import utils
+from typing import Any, Dict, Optional
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class AdminUserImageURI:
+ key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('key') }})
+ original: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('original') }})
+ thumbnail_32: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('thumbnail_32') }})
+ thumbnail_64: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('thumbnail_64') }})
+
+
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class AdminUser:
+ additional_properties: Optional[Dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: f is None }})
+ display_name: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('display_name') }})
+ email: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('email') }})
+ image_uri: Optional[AdminUserImageURI] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('image_uri') }})
+ org_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('org_id'), 'exclude': lambda f: f is None }})
+ phone: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('phone') }})
+ type: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type') }})
+ user_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('user_id'), 'exclude': lambda f: f is None }})
+
+
diff --git a/customer_portal/src/epilot/models/shared/balance.py b/customer_portal/src/epilot/models/shared/balance.py
new file mode 100755
index 000000000..2b91e15b5
--- /dev/null
+++ b/customer_portal/src/epilot/models/shared/balance.py
@@ -0,0 +1,20 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from epilot import utils
+from typing import Optional
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class Balance:
+ balance: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('balance'), 'exclude': lambda f: f is None }})
+ r"""Current balance of the customer in cents. (precision 2)"""
+ balance_currency: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('balance_currency'), 'exclude': lambda f: f is None }})
+ r"""Currency code in ISO 4217 format"""
+ balance_decimal: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('balance_decimal'), 'exclude': lambda f: f is None }})
+ r"""Current balance of the customer in decimal string representation."""
+
+
diff --git a/customer_portal/src/epilot/models/shared/billingevent.py b/customer_portal/src/epilot/models/shared/billingevent.py
new file mode 100755
index 000000000..45e81c8c9
--- /dev/null
+++ b/customer_portal/src/epilot/models/shared/billingevent.py
@@ -0,0 +1,73 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import dateutil.parser
+from ..shared import installmentevent as shared_installmentevent
+from dataclasses_json import Undefined, dataclass_json
+from datetime import date, datetime
+from enum import Enum
+from epilot import utils
+from typing import Any, Dict, List, Optional
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class BillingEventReimbursementEventContractDollarRelation:
+ entity_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity_id'), 'exclude': lambda f: f is None }})
+ r"""Entity ID for the related contract."""
+
+
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class BillingEventReimbursementEventContract:
+ dollar_relation: Optional[List[BillingEventReimbursementEventContractDollarRelation]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('$relation'), 'exclude': lambda f: f is None }})
+
+
+
+class BillingEventReimbursementEventType(str, Enum):
+ r"""Type of the billing event."""
+ REIMBURSEMENT = 'reimbursement'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class BillingEventReimbursementEvent:
+ r"""A base billing event to be inherited by all billing events."""
+ created_at: datetime = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_created_at'), 'encoder': utils.datetimeisoformat(False), 'decoder': dateutil.parser.isoparse }})
+ r"""Creation timestamp of the entity"""
+ id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_id') }})
+ r"""Entity ID"""
+ org: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_org') }})
+ r"""Organization ID the entity belongs to"""
+ title: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_title') }})
+ r"""Title of the entity"""
+ updated_at: datetime = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_updated_at'), 'encoder': utils.datetimeisoformat(False), 'decoder': dateutil.parser.isoparse }})
+ r"""Last update timestamp of the entity"""
+ contract: BillingEventReimbursementEventContract = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('contract') }})
+ type: BillingEventReimbursementEventType = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type') }})
+ r"""Type of the billing event."""
+ tags: Optional[List[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_tags'), 'exclude': lambda f: f is None }})
+ r"""Array of entity tags"""
+ additional_properties: Optional[Dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: f is None }})
+ billing_amount: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('billing_amount'), 'exclude': lambda f: f is None }})
+ r"""Amount to be paid in cents i.e. precision 2"""
+ billing_amount_decimal: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('billing_amount_decimal'), 'exclude': lambda f: f is None }})
+ r"""Amount to be paid in cents in decimal string representation"""
+ billing_currency: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('billing_currency'), 'exclude': lambda f: f is None }})
+ r"""Currency code in ISO 4217 format"""
+ due_date: Optional[date] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('due_date'), 'encoder': utils.dateisoformat(True), 'decoder': utils.datefromisoformat, 'exclude': lambda f: f is None }})
+ r"""Date on which the installment is due."""
+ external_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('external_id'), 'exclude': lambda f: f is None }})
+ r"""Unique identifier for event, used to reference the event to a 3rd party resource such as a SAP Installment."""
+ paid_date: Optional[date] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('paid_date'), 'encoder': utils.dateisoformat(True), 'decoder': utils.datefromisoformat, 'exclude': lambda f: f is None }})
+ r"""Date on which the customer is reimbursed."""
+
+
+
+
+@dataclasses.dataclass
+class BillingEvent:
+ pass
diff --git a/customer_portal/src/epilot/models/shared/contact.py b/customer_portal/src/epilot/models/shared/contact.py
new file mode 100755
index 000000000..db6e7fb1c
--- /dev/null
+++ b/customer_portal/src/epilot/models/shared/contact.py
@@ -0,0 +1,35 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import dateutil.parser
+from dataclasses_json import Undefined, dataclass_json
+from datetime import datetime
+from enum import Enum
+from epilot import utils
+from typing import Any, Dict, List, Optional
+
+class ContactSchema(str, Enum):
+ CONTACT = 'contact'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class Contact:
+ r"""The mapped contact of the portal user"""
+ created_at: datetime = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_created_at'), 'encoder': utils.datetimeisoformat(False), 'decoder': dateutil.parser.isoparse }})
+ r"""Creation timestamp of the entity"""
+ id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_id') }})
+ r"""Entity ID"""
+ org: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_org') }})
+ r"""Organization ID the entity belongs to"""
+ schema: ContactSchema = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_schema') }})
+ title: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_title') }})
+ r"""Title of the entity"""
+ updated_at: datetime = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_updated_at'), 'encoder': utils.datetimeisoformat(False), 'decoder': dateutil.parser.isoparse }})
+ r"""Last update timestamp of the entity"""
+ tags: Optional[List[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_tags'), 'exclude': lambda f: f is None }})
+ r"""Array of entity tags"""
+ additional_properties: Optional[Dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: f is None }})
+
+
diff --git a/customer_portal/src/epilot/models/shared/contactcountrequest.py b/customer_portal/src/epilot/models/shared/contactcountrequest.py
new file mode 100755
index 000000000..fd9769712
--- /dev/null
+++ b/customer_portal/src/epilot/models/shared/contactcountrequest.py
@@ -0,0 +1,18 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from epilot import utils
+from typing import Dict
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class ContactCountRequest:
+ contact_identifiers: Dict[str, str] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('contactIdentifiers') }})
+ r"""Identifiers to identify a contact"""
+ org_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('orgId') }})
+ r"""ID of the organization"""
+
+
diff --git a/customer_portal/src/epilot/models/shared/contentwidget.py b/customer_portal/src/epilot/models/shared/contentwidget.py
new file mode 100755
index 000000000..4558067cd
--- /dev/null
+++ b/customer_portal/src/epilot/models/shared/contentwidget.py
@@ -0,0 +1,47 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from epilot import utils
+from typing import Optional
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class ContentWidgetHeadline:
+ de: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('de'), 'exclude': lambda f: f is None }})
+ en: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('en'), 'exclude': lambda f: f is None }})
+
+
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class ContentWidgetSubHeadline:
+ de: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('de'), 'exclude': lambda f: f is None }})
+ en: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('en'), 'exclude': lambda f: f is None }})
+
+
+
+class ContentWidgetType(str, Enum):
+ ACTION_WIDGET = 'ACTION_WIDGET'
+ CONTENT_WIDGET = 'CONTENT_WIDGET'
+ ENTITY_WIDGET = 'ENTITY_WIDGET'
+ TEASER_WIDGET = 'TEASER_WIDGET'
+ DOCUMENT_WIDGET = 'DOCUMENT_WIDGET'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class ContentWidget:
+ id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id') }})
+ list_index: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('listIndex') }})
+ r"""Index of the widget in the list, used for ordering (left or right)"""
+ type: ContentWidgetType = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type') }})
+ content: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('content'), 'exclude': lambda f: f is None }})
+ headline: Optional[ContentWidgetHeadline] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('headline'), 'exclude': lambda f: f is None }})
+ sub_headline: Optional[ContentWidgetSubHeadline] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('subHeadline'), 'exclude': lambda f: f is None }})
+
+
diff --git a/customer_portal/src/epilot/models/shared/contract.py b/customer_portal/src/epilot/models/shared/contract.py
new file mode 100755
index 000000000..9352111ef
--- /dev/null
+++ b/customer_portal/src/epilot/models/shared/contract.py
@@ -0,0 +1,122 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import dateutil.parser
+from dataclasses_json import Undefined, dataclass_json
+from datetime import date, datetime
+from enum import Enum
+from epilot import utils
+from typing import Any, Dict, List, Optional
+
+class ContractBillingPeriod(str, Enum):
+ r"""The billing period associated with the contract."""
+ WEEKLY = 'weekly'
+ MONTHLY = 'monthly'
+ EVERY_QUARTER = 'every_quarter'
+ EVERY_6_MONTHS = 'every_6_months'
+ YEARLY = 'yearly'
+
+class ContractBranch(str, Enum):
+ r"""The branch associated with the contract."""
+ POWER = 'power'
+ GAS = 'gas'
+ WATER = 'water'
+ WASTE_WATER = 'waste_water'
+ DISTRICT_HEATING = 'district_heating'
+
+class ContractNoticeTimeUnit(str, Enum):
+ r"""The unit of time for the notice period."""
+ WEEKS = 'weeks'
+ MONTHS = 'months'
+ YEARS = 'years'
+
+class ContractRenewalDurationUnit(str, Enum):
+ r"""The unit of time for the renewal period."""
+ WEEKS = 'weeks'
+ MONTHS = 'months'
+ YEARS = 'years'
+
+class ContractStatus(str, Enum):
+ r"""The status of the contract."""
+ DRAFT = 'draft'
+ IN_APPROVAL_PROCESS = 'in_approval_process'
+ APPROVED = 'approved'
+ ACTIVE = 'active'
+ DEACTIVATED = 'deactivated'
+ REVOKED = 'revoked'
+ TERMINATED = 'terminated'
+ EXPIRED = 'expired'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class Contract:
+ r"""The contract entity"""
+ created_at: datetime = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_created_at'), 'encoder': utils.datetimeisoformat(False), 'decoder': dateutil.parser.isoparse }})
+ r"""Creation timestamp of the entity"""
+ id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_id') }})
+ r"""Entity ID"""
+ org: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_org') }})
+ r"""Organization ID the entity belongs to"""
+ title: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_title') }})
+ r"""Title of the entity"""
+ updated_at: datetime = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_updated_at'), 'encoder': utils.datetimeisoformat(False), 'decoder': dateutil.parser.isoparse }})
+ r"""Last update timestamp of the entity"""
+ tags: Optional[List[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_tags'), 'exclude': lambda f: f is None }})
+ r"""Array of entity tags"""
+ account_number: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('account_number'), 'exclude': lambda f: f is None }})
+ r"""The account number associated with the contract."""
+ additional_addresses: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('additional_addresses'), 'exclude': lambda f: f is None }})
+ r"""Any additional addresses associated with the contract."""
+ additional_properties: Optional[Dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: f is None }})
+ balance: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('balance'), 'exclude': lambda f: f is None }})
+ r"""Current balance of the contract in cents. (precision 2)"""
+ balance_amount_decimal: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('balance_amount_decimal'), 'exclude': lambda f: f is None }})
+ r"""Current balance of the contract in decimal string representation."""
+ balance_currency: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('balance_currency'), 'exclude': lambda f: f is None }})
+ r"""Currency code in ISO 4217 format"""
+ billing_address: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('billing_address'), 'exclude': lambda f: f is None }})
+ r"""The billing address associated with the contract."""
+ billing_duration_amount: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('billing_duration_amount'), 'exclude': lambda f: f is None }})
+ r"""The duration of the billing period."""
+ billing_period: Optional[ContractBillingPeriod] = dataclasses.field(default=ContractBillingPeriod.WEEKLY, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('billing_period'), 'exclude': lambda f: f is None }})
+ r"""The billing period associated with the contract."""
+ billing_schedule_by_month_day: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('billing_schedule_by_month_day'), 'exclude': lambda f: f is None }})
+ r"""Defines the day of the month in which the installments are due."""
+ billing_schedule_end_date: Optional[date] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('billing_schedule_end_date'), 'encoder': utils.dateisoformat(True), 'decoder': utils.datefromisoformat, 'exclude': lambda f: f is None }})
+ r"""Defines the end date for the billing schedule"""
+ billing_schedule_start_date: Optional[date] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('billing_schedule_start_date'), 'encoder': utils.dateisoformat(True), 'decoder': utils.datefromisoformat, 'exclude': lambda f: f is None }})
+ r"""Defines the start date for the billing schedule"""
+ branch: Optional[ContractBranch] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('branch'), 'exclude': lambda f: f is None }})
+ r"""The branch associated with the contract."""
+ contract_name: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('contract_name'), 'exclude': lambda f: f is None }})
+ r"""The name of the contract."""
+ contract_number: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('contract_number'), 'exclude': lambda f: f is None }})
+ r"""The unique identifier of the contract."""
+ delivery_address: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('delivery_address'), 'exclude': lambda f: f is None }})
+ r"""The delivery address associated with the contract."""
+ description: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('description'), 'exclude': lambda f: f is None }})
+ r"""A brief description of the contract."""
+ installment_amount: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('installment_amount'), 'exclude': lambda f: f is None }})
+ r"""Set amount for installments in cents. (precision 2)"""
+ installment_amount_decimal: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('installment_amount_decimal'), 'exclude': lambda f: f is None }})
+ r"""Set amount for installments in decimal string representation."""
+ notice_time_amount: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('notice_time_amount'), 'exclude': lambda f: f is None }})
+ r"""The amount of notice required for termination of the contract."""
+ notice_time_unit: Optional[ContractNoticeTimeUnit] = dataclasses.field(default=ContractNoticeTimeUnit.MONTHS, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('notice_time_unit'), 'exclude': lambda f: f is None }})
+ r"""The unit of time for the notice period."""
+ renewal_duration_amount: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('renewal_duration_amount'), 'exclude': lambda f: f is None }})
+ r"""The duration of the renewal period."""
+ renewal_duration_unit: Optional[ContractRenewalDurationUnit] = dataclasses.field(default=ContractRenewalDurationUnit.MONTHS, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('renewal_duration_unit'), 'exclude': lambda f: f is None }})
+ r"""The unit of time for the renewal period."""
+ start_date: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date'), 'exclude': lambda f: f is None }})
+ r"""The start date of the contract."""
+ status: Optional[ContractStatus] = dataclasses.field(default=ContractStatus.DRAFT, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status'), 'exclude': lambda f: f is None }})
+ r"""The status of the contract."""
+ termination_date: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('termination_date'), 'exclude': lambda f: f is None }})
+ r"""The date on which the contract was terminated."""
+ termination_reason: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('termination_reason'), 'exclude': lambda f: f is None }})
+ r"""The reason for the termination of the contract."""
+
+
diff --git a/customer_portal/src/epilot/models/shared/createssouserrequest.py b/customer_portal/src/epilot/models/shared/createssouserrequest.py
new file mode 100755
index 000000000..0fe7a95fd
--- /dev/null
+++ b/customer_portal/src/epilot/models/shared/createssouserrequest.py
@@ -0,0 +1,20 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from epilot import utils
+from typing import Optional
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class CreateSSOUserRequest:
+ email: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('email') }})
+ r"""User's email address"""
+ first_name: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('first_name'), 'exclude': lambda f: f is None }})
+ r"""First Name of the portal user"""
+ last_name: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('last_name'), 'exclude': lambda f: f is None }})
+ r"""Last Name of the portal user"""
+
+
diff --git a/customer_portal/src/epilot/models/shared/createuserrequest.py b/customer_portal/src/epilot/models/shared/createuserrequest.py
new file mode 100755
index 000000000..39c73fa49
--- /dev/null
+++ b/customer_portal/src/epilot/models/shared/createuserrequest.py
@@ -0,0 +1,30 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from epilot import utils
+from typing import Dict, Optional
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class CreateUserRequest:
+ email: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('email') }})
+ r"""User's email address"""
+ org_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('orgId') }})
+ r"""ID of the organization"""
+ password: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('password') }})
+ r"""User's password"""
+ contact_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('contactId'), 'exclude': lambda f: f is None }})
+ r"""ID of the contact"""
+ contact_identifiers: Optional[Dict[str, str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('contactIdentifiers'), 'exclude': lambda f: f is None }})
+ r"""Identifiers to identify a contact"""
+ first_name: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('first_name'), 'exclude': lambda f: f is None }})
+ r"""First Name of the portal user"""
+ last_name: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('last_name'), 'exclude': lambda f: f is None }})
+ r"""Last Name of the portal user"""
+ secondary_identifier: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('secondaryIdentifier'), 'exclude': lambda f: f is None }})
+ r"""Secondary identifier to identify a contact"""
+
+
diff --git a/customer_portal/src/epilot/models/shared/deleteentityfile.py b/customer_portal/src/epilot/models/shared/deleteentityfile.py
index 5eba301bd..2adfd69e7 100755
--- a/customer_portal/src/epilot/models/shared/deleteentityfile.py
+++ b/customer_portal/src/epilot/models/shared/deleteentityfile.py
@@ -4,14 +4,17 @@
import dataclasses
from dataclasses_json import Undefined, dataclass_json
from epilot import utils
+from typing import List
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class DeleteEntityFile:
- r"""Delete file"""
+ entity_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity_id') }})
+ r"""Entity ID"""
+ entity_type: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity_type') }})
+ r"""Entity type"""
+ file_entity_ids: List[str] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('file_entity_ids') }})
+ r"""Array of file entity IDs"""
- entity_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity_id') }})
- entity_type: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity_type') }})
- file_entity_ids: list[str] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('file_entity_ids') }})
-
\ No newline at end of file
+
diff --git a/customer_portal/src/epilot/models/shared/emailtemplates.py b/customer_portal/src/epilot/models/shared/emailtemplates.py
index 1f8d9b4b0..2a5d5faa1 100755
--- a/customer_portal/src/epilot/models/shared/emailtemplates.py
+++ b/customer_portal/src/epilot/models/shared/emailtemplates.py
@@ -10,11 +10,16 @@
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class EmailTemplates:
- r"""ok"""
+ r"""Email templates used for authentication and internal processes"""
+ confirm_account: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('confirmAccount'), 'exclude': lambda f: f is None }})
+ r"""ID of the confirmation email template upon registration"""
+ forgot_password: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('forgotPassword'), 'exclude': lambda f: f is None }})
+ r"""ID of the email template for forgot password"""
+ invitation: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('invitation'), 'exclude': lambda f: f is None }})
+ r"""ID of the email template for invitation"""
+ on_map_a_pending_user: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('onMapAPendingUser'), 'exclude': lambda f: f is None }})
+ r"""ID of the email template for mapping a pending portal user with a contact"""
+ on_new_quote: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('onNewQuote'), 'exclude': lambda f: f is None }})
+ r"""ID of the email template for new quote"""
- confirm_account: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('confirmAccount'), 'exclude': lambda f: f is None }})
- forgot_password: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('forgotPassword'), 'exclude': lambda f: f is None }})
- invitation: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('invitation'), 'exclude': lambda f: f is None }})
- on_map_a_pending_user: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('onMapAPendingUser'), 'exclude': lambda f: f is None }})
- on_new_quote: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('onNewQuote'), 'exclude': lambda f: f is None }})
-
\ No newline at end of file
+
diff --git a/customer_portal/src/epilot/models/shared/entityfilecount.py b/customer_portal/src/epilot/models/shared/entityfilecount.py
new file mode 100755
index 000000000..a021befb5
--- /dev/null
+++ b/customer_portal/src/epilot/models/shared/entityfilecount.py
@@ -0,0 +1,23 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from ..shared import entityslug as shared_entityslug
+from dataclasses_json import Undefined, dataclass_json
+from epilot import utils
+from typing import Optional
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class EntityFileCount:
+ schema: shared_entityslug.EntitySlug = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_schema') }})
+ r"""URL-friendly identifier for the entity schema"""
+ entity_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity_id') }})
+ r"""The ID of the parent entity"""
+ file_count: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('file_count') }})
+ r"""Number of files associated with the entity and shared with portal user"""
+ title: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_title'), 'exclude': lambda f: f is None }})
+ r"""The title of the parent entity"""
+
+
diff --git a/customer_portal/src/epilot/models/shared/entityitem.py b/customer_portal/src/epilot/models/shared/entityitem.py
new file mode 100755
index 000000000..165c441f6
--- /dev/null
+++ b/customer_portal/src/epilot/models/shared/entityitem.py
@@ -0,0 +1,32 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import dateutil.parser
+from ..shared import entityslug as shared_entityslug
+from dataclasses_json import Undefined, dataclass_json
+from datetime import datetime
+from epilot import utils
+from typing import Any, Dict, List, Optional
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class EntityItem:
+ created_at: datetime = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_created_at'), 'encoder': utils.datetimeisoformat(False), 'decoder': dateutil.parser.isoparse }})
+ r"""Creation timestamp of the entity"""
+ id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_id') }})
+ r"""Entity ID"""
+ org: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_org') }})
+ r"""Organization ID the entity belongs to"""
+ schema: shared_entityslug.EntitySlug = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_schema') }})
+ r"""URL-friendly identifier for the entity schema"""
+ title: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_title') }})
+ r"""Title of the entity"""
+ updated_at: datetime = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_updated_at'), 'encoder': utils.datetimeisoformat(False), 'decoder': dateutil.parser.isoparse }})
+ r"""Last update timestamp of the entity"""
+ tags: Optional[List[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_tags'), 'exclude': lambda f: f is None }})
+ r"""Array of entity tags"""
+ additional_properties: Optional[Dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: f is None }})
+
+
diff --git a/customer_portal/src/epilot/models/shared/entityslug.py b/customer_portal/src/epilot/models/shared/entityslug.py
new file mode 100755
index 000000000..3dd90845f
--- /dev/null
+++ b/customer_portal/src/epilot/models/shared/entityslug.py
@@ -0,0 +1,16 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+from enum import Enum
+
+class EntitySlug(str, Enum):
+ r"""URL-friendly identifier for the entity schema"""
+ CONTACT = 'contact'
+ CONTRACT = 'contract'
+ FILE = 'file'
+ ORDER = 'order'
+ OPPORTUNITY = 'opportunity'
+ PRODUCT = 'product'
+ PRICE = 'price'
+ METER = 'meter'
+ METER_COUNTER = 'meter_counter'
diff --git a/customer_portal/src/epilot/models/shared/entitywidget.py b/customer_portal/src/epilot/models/shared/entitywidget.py
new file mode 100755
index 000000000..4043b8810
--- /dev/null
+++ b/customer_portal/src/epilot/models/shared/entitywidget.py
@@ -0,0 +1,47 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from epilot import utils
+from typing import Optional
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class EntityWidgetHeadline:
+ de: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('de'), 'exclude': lambda f: f is None }})
+ en: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('en'), 'exclude': lambda f: f is None }})
+
+
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class EntityWidgetSubHeadline:
+ de: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('de'), 'exclude': lambda f: f is None }})
+ en: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('en'), 'exclude': lambda f: f is None }})
+
+
+
+class EntityWidgetType(str, Enum):
+ ACTION_WIDGET = 'ACTION_WIDGET'
+ CONTENT_WIDGET = 'CONTENT_WIDGET'
+ ENTITY_WIDGET = 'ENTITY_WIDGET'
+ TEASER_WIDGET = 'TEASER_WIDGET'
+ DOCUMENT_WIDGET = 'DOCUMENT_WIDGET'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class EntityWidget:
+ id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id') }})
+ list_index: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('listIndex') }})
+ r"""Index of the widget in the list, used for ordering (left or right)"""
+ type: EntityWidgetType = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type') }})
+ headline: Optional[EntityWidgetHeadline] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('headline'), 'exclude': lambda f: f is None }})
+ schema: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('schema'), 'exclude': lambda f: f is None }})
+ sub_headline: Optional[EntityWidgetSubHeadline] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('subHeadline'), 'exclude': lambda f: f is None }})
+
+
diff --git a/customer_portal/src/epilot/models/shared/errorresp.py b/customer_portal/src/epilot/models/shared/errorresp.py
index 1adc87498..112d1ed40 100755
--- a/customer_portal/src/epilot/models/shared/errorresp.py
+++ b/customer_portal/src/epilot/models/shared/errorresp.py
@@ -10,7 +10,7 @@
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class ErrorResp:
- r"""Other errors"""
+ message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('message'), 'exclude': lambda f: f is None }})
+ r"""Error message"""
- message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('message'), 'exclude': lambda f: f is None }})
-
\ No newline at end of file
+
diff --git a/customer_portal/src/epilot/models/shared/extraschemaattributes.py b/customer_portal/src/epilot/models/shared/extraschemaattributes.py
index 8a6a8b9dd..0270edf54 100755
--- a/customer_portal/src/epilot/models/shared/extraschemaattributes.py
+++ b/customer_portal/src/epilot/models/shared/extraschemaattributes.py
@@ -4,14 +4,16 @@
import dataclasses
from dataclasses_json import Undefined, dataclass_json
from epilot import utils
-from typing import Optional
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class ExtraSchemaAttributes:
+ group: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('group') }})
+ r"""Attribute group"""
+ label: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('label') }})
+ r"""Attribute label"""
+ name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }})
+ r"""Attribute name"""
- group: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('group'), 'exclude': lambda f: f is None }})
- label: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('label'), 'exclude': lambda f: f is None }})
- name: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name'), 'exclude': lambda f: f is None }})
-
\ No newline at end of file
+
diff --git a/customer_portal/src/epilot/models/shared/failedruleerrorresp.py b/customer_portal/src/epilot/models/shared/failedruleerrorresp.py
new file mode 100755
index 000000000..af580eb2e
--- /dev/null
+++ b/customer_portal/src/epilot/models/shared/failedruleerrorresp.py
@@ -0,0 +1,25 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from epilot import utils
+from typing import Optional
+
+
+@dataclasses.dataclass
+class FailedRuleErrorRespFailedRule:
+ r"""Failed validation rule"""
+
+
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class FailedRuleErrorResp:
+ failed_rule: Optional[FailedRuleErrorRespFailedRule] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('failed_rule'), 'exclude': lambda f: f is None }})
+ r"""Failed validation rule"""
+ message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('message'), 'exclude': lambda f: f is None }})
+ r"""Error message"""
+
+
diff --git a/customer_portal/src/epilot/models/shared/file.py b/customer_portal/src/epilot/models/shared/file.py
new file mode 100755
index 000000000..89360ee40
--- /dev/null
+++ b/customer_portal/src/epilot/models/shared/file.py
@@ -0,0 +1,35 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import dateutil.parser
+from dataclasses_json import Undefined, dataclass_json
+from datetime import datetime
+from enum import Enum
+from epilot import utils
+from typing import Any, Dict, List, Optional
+
+class FileSchema(str, Enum):
+ FILE = 'file'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class File:
+ r"""The file entity"""
+ created_at: datetime = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_created_at'), 'encoder': utils.datetimeisoformat(False), 'decoder': dateutil.parser.isoparse }})
+ r"""Creation timestamp of the entity"""
+ id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_id') }})
+ r"""Entity ID"""
+ org: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_org') }})
+ r"""Organization ID the entity belongs to"""
+ schema: FileSchema = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_schema') }})
+ title: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_title') }})
+ r"""Title of the entity"""
+ updated_at: datetime = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_updated_at'), 'encoder': utils.datetimeisoformat(False), 'decoder': dateutil.parser.isoparse }})
+ r"""Last update timestamp of the entity"""
+ tags: Optional[List[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_tags'), 'exclude': lambda f: f is None }})
+ r"""Array of entity tags"""
+ additional_properties: Optional[Dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: f is None }})
+
+
diff --git a/customer_portal/src/epilot/models/shared/fileitem.py b/customer_portal/src/epilot/models/shared/fileitem.py
new file mode 100755
index 000000000..0aa5820ce
--- /dev/null
+++ b/customer_portal/src/epilot/models/shared/fileitem.py
@@ -0,0 +1,79 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import dateutil.parser
+from ..shared import entityslug as shared_entityslug
+from dataclasses_json import Undefined, dataclass_json
+from datetime import datetime
+from enum import Enum
+from epilot import utils
+from typing import Any, Dict, List, Optional
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class FileItemRelations:
+ schema: Optional[shared_entityslug.EntitySlug] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_schema'), 'exclude': lambda f: f is None }})
+ r"""URL-friendly identifier for the entity schema"""
+ title: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_title'), 'exclude': lambda f: f is None }})
+ r"""The title of the parent entity"""
+ entity_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity_id'), 'exclude': lambda f: f is None }})
+ r"""The ID of the parent entity"""
+
+
+
+class FileItemSchema(str, Enum):
+ FILE = 'file'
+
+class FileItemAccessControl(str, Enum):
+ PRIVATE = 'private'
+ PUBLIC_READ = 'public-read'
+
+class FileItemType(str, Enum):
+ r"""Human readable type for file"""
+ DOCUMENT = 'document'
+ DOCUMENT_TEMPLATE = 'document_template'
+ TEXT = 'text'
+ IMAGE = 'image'
+ VIDEO = 'video'
+ AUDIO = 'audio'
+ SPREADSHEET = 'spreadsheet'
+ PRESENTATION = 'presentation'
+ FONT = 'font'
+ ARCHIVE = 'archive'
+ APPLICATION = 'application'
+ UNKNOWN = 'unknown'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class FileItem:
+ r"""The file entity"""
+ created_at: datetime = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_created_at'), 'encoder': utils.datetimeisoformat(False), 'decoder': dateutil.parser.isoparse }})
+ r"""Creation timestamp of the entity"""
+ id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_id') }})
+ r"""Entity ID"""
+ org: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_org') }})
+ r"""Organization ID the entity belongs to"""
+ schema: FileItemSchema = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_schema') }})
+ title: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_title') }})
+ r"""Title of the entity"""
+ updated_at: datetime = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_updated_at'), 'encoder': utils.datetimeisoformat(False), 'decoder': dateutil.parser.isoparse }})
+ r"""Last update timestamp of the entity"""
+ relations: Optional[List[FileItemRelations]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_relations'), 'exclude': lambda f: f is None }})
+ tags: Optional[List[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_tags'), 'exclude': lambda f: f is None }})
+ r"""Array of entity tags"""
+ access_control: Optional[FileItemAccessControl] = dataclasses.field(default=FileItemAccessControl.PRIVATE, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('access_control'), 'exclude': lambda f: f is None }})
+ additional_properties: Optional[Dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: f is None }})
+ filename: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('filename'), 'exclude': lambda f: f is None }})
+ is_new: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('is_new'), 'exclude': lambda f: f is None }})
+ r"""Indicate whether the user has not seen/downloaded the file before"""
+ mime_type: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('mime_type'), 'exclude': lambda f: f is None }})
+ r"""MIME type of the file"""
+ public_url: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('public_url'), 'exclude': lambda f: f is None }})
+ r"""Direct URL for file (public only if file access control is public-read)"""
+ type: Optional[FileItemType] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }})
+ r"""Human readable type for file"""
+
+
diff --git a/customer_portal/src/epilot/models/shared/grant.py b/customer_portal/src/epilot/models/shared/grant.py
index 68bd62897..3779bbaf5 100755
--- a/customer_portal/src/epilot/models/shared/grant.py
+++ b/customer_portal/src/epilot/models/shared/grant.py
@@ -7,16 +7,20 @@
from epilot import utils
from typing import Optional
-class GrantEffectEnum(str, Enum):
- ALLOW = "allow"
- DENY = "deny"
+class GrantEffect(str, Enum):
+ r"""Effect of the permission"""
+ ALLOW = 'allow'
+ DENY = 'deny'
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class Grant:
+ action: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('action') }})
+ r"""Action for granting permission"""
+ effect: Optional[GrantEffect] = dataclasses.field(default=GrantEffect.ALLOW, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('effect'), 'exclude': lambda f: f is None }})
+ r"""Effect of the permission"""
+ resource: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('resource'), 'exclude': lambda f: f is None }})
+ r"""Resource for granting permission"""
- action: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('action') }})
- effect: Optional[GrantEffectEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('effect'), 'exclude': lambda f: f is None }})
- resource: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('resource'), 'exclude': lambda f: f is None }})
-
\ No newline at end of file
+
diff --git a/customer_portal/src/epilot/models/shared/installmentevent.py b/customer_portal/src/epilot/models/shared/installmentevent.py
new file mode 100755
index 000000000..433428e29
--- /dev/null
+++ b/customer_portal/src/epilot/models/shared/installmentevent.py
@@ -0,0 +1,67 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import dateutil.parser
+from dataclasses_json import Undefined, dataclass_json
+from datetime import date, datetime
+from enum import Enum
+from epilot import utils
+from typing import Any, Dict, List, Optional
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class InstallmentEventContractDollarRelation:
+ entity_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity_id'), 'exclude': lambda f: f is None }})
+ r"""Entity ID for the related contract."""
+
+
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class InstallmentEventContract:
+ dollar_relation: Optional[List[InstallmentEventContractDollarRelation]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('$relation'), 'exclude': lambda f: f is None }})
+
+
+
+class InstallmentEventType(str, Enum):
+ r"""Type of the billing event."""
+ INSTALLMENT = 'installment'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class InstallmentEvent:
+ r"""A base billing event to be inherited by all billing events."""
+ created_at: datetime = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_created_at'), 'encoder': utils.datetimeisoformat(False), 'decoder': dateutil.parser.isoparse }})
+ r"""Creation timestamp of the entity"""
+ id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_id') }})
+ r"""Entity ID"""
+ org: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_org') }})
+ r"""Organization ID the entity belongs to"""
+ title: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_title') }})
+ r"""Title of the entity"""
+ updated_at: datetime = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_updated_at'), 'encoder': utils.datetimeisoformat(False), 'decoder': dateutil.parser.isoparse }})
+ r"""Last update timestamp of the entity"""
+ contract: InstallmentEventContract = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('contract') }})
+ due_date: date = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('due_date'), 'encoder': utils.dateisoformat(False), 'decoder': utils.datefromisoformat }})
+ r"""Date on which the installment is due."""
+ type: InstallmentEventType = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type') }})
+ r"""Type of the billing event."""
+ tags: Optional[List[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_tags'), 'exclude': lambda f: f is None }})
+ r"""Array of entity tags"""
+ additional_properties: Optional[Dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: f is None }})
+ billing_amount: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('billing_amount'), 'exclude': lambda f: f is None }})
+ r"""Amount to be paid in cents i.e. precision 2"""
+ billing_amount_decimal: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('billing_amount_decimal'), 'exclude': lambda f: f is None }})
+ r"""Amount to be paid in cents in decimal string representation"""
+ billing_currency: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('billing_currency'), 'exclude': lambda f: f is None }})
+ r"""Currency code in ISO 4217 format"""
+ external_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('external_id'), 'exclude': lambda f: f is None }})
+ r"""Unique identifier for event, used to reference the event to a 3rd party resource such as a SAP Installment."""
+ paid_date: Optional[date] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('paid_date'), 'encoder': utils.dateisoformat(True), 'decoder': utils.datefromisoformat, 'exclude': lambda f: f is None }})
+ r"""Date on which the installment is paid by the customer."""
+
+
diff --git a/customer_portal/src/epilot/models/shared/opportunity.py b/customer_portal/src/epilot/models/shared/opportunity.py
new file mode 100755
index 000000000..6e7675212
--- /dev/null
+++ b/customer_portal/src/epilot/models/shared/opportunity.py
@@ -0,0 +1,35 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import dateutil.parser
+from dataclasses_json import Undefined, dataclass_json
+from datetime import datetime
+from enum import Enum
+from epilot import utils
+from typing import Any, Dict, List, Optional
+
+class OpportunitySchema(str, Enum):
+ OPPORTUNITY = 'opportunity'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class Opportunity:
+ r"""The opportunity entity"""
+ created_at: datetime = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_created_at'), 'encoder': utils.datetimeisoformat(False), 'decoder': dateutil.parser.isoparse }})
+ r"""Creation timestamp of the entity"""
+ id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_id') }})
+ r"""Entity ID"""
+ org: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_org') }})
+ r"""Organization ID the entity belongs to"""
+ schema: OpportunitySchema = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_schema') }})
+ title: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_title') }})
+ r"""Title of the entity"""
+ updated_at: datetime = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_updated_at'), 'encoder': utils.datetimeisoformat(False), 'decoder': dateutil.parser.isoparse }})
+ r"""Last update timestamp of the entity"""
+ tags: Optional[List[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_tags'), 'exclude': lambda f: f is None }})
+ r"""Array of entity tags"""
+ additional_properties: Optional[Dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: f is None }})
+
+
diff --git a/customer_portal/src/epilot/models/shared/order.py b/customer_portal/src/epilot/models/shared/order.py
new file mode 100755
index 000000000..4c082e45d
--- /dev/null
+++ b/customer_portal/src/epilot/models/shared/order.py
@@ -0,0 +1,35 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import dateutil.parser
+from dataclasses_json import Undefined, dataclass_json
+from datetime import datetime
+from enum import Enum
+from epilot import utils
+from typing import Any, Dict, List, Optional
+
+class OrderSchema(str, Enum):
+ ORDER = 'order'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class Order:
+ r"""The order entity"""
+ created_at: datetime = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_created_at'), 'encoder': utils.datetimeisoformat(False), 'decoder': dateutil.parser.isoparse }})
+ r"""Creation timestamp of the entity"""
+ id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_id') }})
+ r"""Entity ID"""
+ org: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_org') }})
+ r"""Organization ID the entity belongs to"""
+ schema: OrderSchema = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_schema') }})
+ title: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_title') }})
+ r"""Title of the entity"""
+ updated_at: datetime = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_updated_at'), 'encoder': utils.datetimeisoformat(False), 'decoder': dateutil.parser.isoparse }})
+ r"""Last update timestamp of the entity"""
+ tags: Optional[List[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_tags'), 'exclude': lambda f: f is None }})
+ r"""Array of entity tags"""
+ additional_properties: Optional[Dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: f is None }})
+
+
diff --git a/customer_portal/src/epilot/models/shared/organizationsettings.py b/customer_portal/src/epilot/models/shared/organizationsettings.py
index b62bc3d54..0a87fc480 100755
--- a/customer_portal/src/epilot/models/shared/organizationsettings.py
+++ b/customer_portal/src/epilot/models/shared/organizationsettings.py
@@ -10,150 +10,195 @@
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class OrganizationSettingsAutomationEntityMapping:
+ enabled: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('enabled'), 'exclude': lambda f: f is None }})
+ r"""Enable/Disable automation entity mapping"""
- enabled: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('enabled'), 'exclude': lambda f: f is None }})
-
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class OrganizationSettingsAutomationPreview:
-
- enabled: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('enabled'), 'exclude': lambda f: f is None }})
+ enabled: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('enabled'), 'exclude': lambda f: f is None }})
+ r"""Enable/Disable automation preview"""
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class OrganizationSettingsCentralInboxPreviewSetting:
+ enabled: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('enabled'), 'exclude': lambda f: f is None }})
+ r"""Enable/Disable central inbox preview setting"""
- enabled: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('enabled'), 'exclude': lambda f: f is None }})
-
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class OrganizationSettingsContractsPreviewSetting:
+ enabled: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('enabled'), 'exclude': lambda f: f is None }})
+ r"""Enable/Disable contracts preview setting"""
- enabled: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('enabled'), 'exclude': lambda f: f is None }})
-
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class OrganizationSettingsDisableIvy:
+ enabled: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('enabled'), 'exclude': lambda f: f is None }})
+ r"""Enable/Disable Ivy"""
- enabled: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('enabled'), 'exclude': lambda f: f is None }})
-
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class OrganizationSettingsDoubleOptIn:
+ enabled: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('enabled'), 'exclude': lambda f: f is None }})
+ r"""Enable/Disable double opt-in"""
- enabled: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('enabled'), 'exclude': lambda f: f is None }})
-
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class OrganizationSettingsEcommerceCatalogPreview:
-
- enabled: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('enabled'), 'exclude': lambda f: f is None }})
+ enabled: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('enabled'), 'exclude': lambda f: f is None }})
+ r"""Enable/Disable ecommerce catalog preview"""
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class OrganizationSettingsEcommerceOpportunitiesPreview:
+ enabled: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('enabled'), 'exclude': lambda f: f is None }})
+ r"""Enable/Disable ecommerce opportunities preview"""
- enabled: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('enabled'), 'exclude': lambda f: f is None }})
-
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class OrganizationSettingsEcommercePreview:
+ enabled: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('enabled'), 'exclude': lambda f: f is None }})
+ r"""Enable/Disable ecommerce preview"""
- enabled: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('enabled'), 'exclude': lambda f: f is None }})
-
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class OrganizationSettingsEndCustomerPortal:
+ enabled: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('enabled'), 'exclude': lambda f: f is None }})
+ r"""Enable/Disable end customer portal"""
- enabled: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('enabled'), 'exclude': lambda f: f is None }})
-
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class OrganizationSettingsEntitySchemaBuilder:
+ enabled: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('enabled'), 'exclude': lambda f: f is None }})
+ r"""Enable/Disable entity schema builder"""
- enabled: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('enabled'), 'exclude': lambda f: f is None }})
+
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class OrganizationSettingsInstallerPortal:
+ enabled: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('enabled'), 'exclude': lambda f: f is None }})
+ r"""Enable/Disable installer portal"""
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class OrganizationSettingsLogicEditorPreview:
-
- enabled: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('enabled'), 'exclude': lambda f: f is None }})
+ enabled: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('enabled'), 'exclude': lambda f: f is None }})
+ r"""Enable/Disable logic editor preview"""
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class OrganizationSettingsNewNavigation:
+ enabled: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('enabled'), 'exclude': lambda f: f is None }})
+ r"""Enable/Disable new navigation"""
- enabled: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('enabled'), 'exclude': lambda f: f is None }})
-
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class OrganizationSettingsPartnering:
+ enabled: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('enabled'), 'exclude': lambda f: f is None }})
+ r"""Enable/Disable partnering"""
- enabled: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('enabled'), 'exclude': lambda f: f is None }})
-
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class OrganizationSettingsProductAvailability:
+ enabled: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('enabled'), 'exclude': lambda f: f is None }})
+ r"""Enable/Disable product availability"""
- enabled: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('enabled'), 'exclude': lambda f: f is None }})
-
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class OrganizationSettingsSso:
+ enabled: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('enabled'), 'exclude': lambda f: f is None }})
+ r"""Enable/Disable single sign-on (SSO)"""
- enabled: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('enabled'), 'exclude': lambda f: f is None }})
-
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class OrganizationSettingsSubmissionPreview:
-
- enabled: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('enabled'), 'exclude': lambda f: f is None }})
+ enabled: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('enabled'), 'exclude': lambda f: f is None }})
+ r"""Enable/Disable submission preview"""
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class OrganizationSettingsUserRolesPreview:
+ enabled: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('enabled'), 'exclude': lambda f: f is None }})
+ r"""Enable/Disable user roles preview"""
- enabled: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('enabled'), 'exclude': lambda f: f is None }})
-
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class OrganizationSettings:
- r"""ok"""
-
- automation_entity_mapping: Optional[OrganizationSettingsAutomationEntityMapping] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('automation_entity_mapping'), 'exclude': lambda f: f is None }})
- automation_preview: Optional[OrganizationSettingsAutomationPreview] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('automation_preview'), 'exclude': lambda f: f is None }})
- central_inbox_preview_setting: Optional[OrganizationSettingsCentralInboxPreviewSetting] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('central_inbox_preview_setting'), 'exclude': lambda f: f is None }})
- contracts_preview_setting: Optional[OrganizationSettingsContractsPreviewSetting] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('contracts_preview_setting'), 'exclude': lambda f: f is None }})
- disable_ivy: Optional[OrganizationSettingsDisableIvy] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('disable_ivy'), 'exclude': lambda f: f is None }})
- double_opt_in: Optional[OrganizationSettingsDoubleOptIn] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('double_opt_in'), 'exclude': lambda f: f is None }})
- ecommerce_catalog_preview: Optional[OrganizationSettingsEcommerceCatalogPreview] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ecommerce_catalog_preview'), 'exclude': lambda f: f is None }})
- ecommerce_opportunities_preview: Optional[OrganizationSettingsEcommerceOpportunitiesPreview] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ecommerce_opportunities_preview'), 'exclude': lambda f: f is None }})
- ecommerce_preview: Optional[OrganizationSettingsEcommercePreview] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ecommerce_preview'), 'exclude': lambda f: f is None }})
- end_customer_portal: Optional[OrganizationSettingsEndCustomerPortal] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('end_customer_portal'), 'exclude': lambda f: f is None }})
- entity_schema_builder: Optional[OrganizationSettingsEntitySchemaBuilder] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity_schema_builder'), 'exclude': lambda f: f is None }})
- logic_editor_preview: Optional[OrganizationSettingsLogicEditorPreview] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('logic_editor_preview'), 'exclude': lambda f: f is None }})
- new_navigation: Optional[OrganizationSettingsNewNavigation] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('new_navigation'), 'exclude': lambda f: f is None }})
- partnering: Optional[OrganizationSettingsPartnering] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('partnering'), 'exclude': lambda f: f is None }})
- product_availability: Optional[OrganizationSettingsProductAvailability] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('product-availability'), 'exclude': lambda f: f is None }})
- sso: Optional[OrganizationSettingsSso] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sso'), 'exclude': lambda f: f is None }})
- submission_preview: Optional[OrganizationSettingsSubmissionPreview] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('submission_preview'), 'exclude': lambda f: f is None }})
- user_roles_preview: Optional[OrganizationSettingsUserRolesPreview] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('user_roles_preview'), 'exclude': lambda f: f is None }})
-
\ No newline at end of file
+ automation_entity_mapping: Optional[OrganizationSettingsAutomationEntityMapping] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('automation_entity_mapping'), 'exclude': lambda f: f is None }})
+ automation_preview: Optional[OrganizationSettingsAutomationPreview] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('automation_preview'), 'exclude': lambda f: f is None }})
+ central_inbox_preview_setting: Optional[OrganizationSettingsCentralInboxPreviewSetting] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('central_inbox_preview_setting'), 'exclude': lambda f: f is None }})
+ contracts_preview_setting: Optional[OrganizationSettingsContractsPreviewSetting] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('contracts_preview_setting'), 'exclude': lambda f: f is None }})
+ disable_ivy: Optional[OrganizationSettingsDisableIvy] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('disable_ivy'), 'exclude': lambda f: f is None }})
+ double_opt_in: Optional[OrganizationSettingsDoubleOptIn] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('double_opt_in'), 'exclude': lambda f: f is None }})
+ ecommerce_catalog_preview: Optional[OrganizationSettingsEcommerceCatalogPreview] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ecommerce_catalog_preview'), 'exclude': lambda f: f is None }})
+ ecommerce_opportunities_preview: Optional[OrganizationSettingsEcommerceOpportunitiesPreview] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ecommerce_opportunities_preview'), 'exclude': lambda f: f is None }})
+ ecommerce_preview: Optional[OrganizationSettingsEcommercePreview] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ecommerce_preview'), 'exclude': lambda f: f is None }})
+ end_customer_portal: Optional[OrganizationSettingsEndCustomerPortal] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('end_customer_portal'), 'exclude': lambda f: f is None }})
+ entity_schema_builder: Optional[OrganizationSettingsEntitySchemaBuilder] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity_schema_builder'), 'exclude': lambda f: f is None }})
+ installer_portal: Optional[OrganizationSettingsInstallerPortal] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('installer_portal'), 'exclude': lambda f: f is None }})
+ logic_editor_preview: Optional[OrganizationSettingsLogicEditorPreview] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('logic_editor_preview'), 'exclude': lambda f: f is None }})
+ new_navigation: Optional[OrganizationSettingsNewNavigation] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('new_navigation'), 'exclude': lambda f: f is None }})
+ partnering: Optional[OrganizationSettingsPartnering] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('partnering'), 'exclude': lambda f: f is None }})
+ product_availability: Optional[OrganizationSettingsProductAvailability] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('product-availability'), 'exclude': lambda f: f is None }})
+ sso: Optional[OrganizationSettingsSso] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sso'), 'exclude': lambda f: f is None }})
+ submission_preview: Optional[OrganizationSettingsSubmissionPreview] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('submission_preview'), 'exclude': lambda f: f is None }})
+ user_roles_preview: Optional[OrganizationSettingsUserRolesPreview] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('user_roles_preview'), 'exclude': lambda f: f is None }})
+
+
diff --git a/customer_portal/src/epilot/models/shared/origin_enum.py b/customer_portal/src/epilot/models/shared/origin.py
similarity index 58%
rename from customer_portal/src/epilot/models/shared/origin_enum.py
rename to customer_portal/src/epilot/models/shared/origin.py
index 4e14b8035..f393fb2fc 100755
--- a/customer_portal/src/epilot/models/shared/origin_enum.py
+++ b/customer_portal/src/epilot/models/shared/origin.py
@@ -3,7 +3,7 @@
from __future__ import annotations
from enum import Enum
-class OriginEnum(str, Enum):
+class Origin(str, Enum):
r"""Origin of the portal"""
- END_CUSTOMER_PORTAL = "END_CUSTOMER_PORTAL"
- INSTALLER_PORTAL = "INSTALLER_PORTAL"
+ END_CUSTOMER_PORTAL = 'END_CUSTOMER_PORTAL'
+ INSTALLER_PORTAL = 'INSTALLER_PORTAL'
diff --git a/customer_portal/src/epilot/models/shared/portalconfig.py b/customer_portal/src/epilot/models/shared/portalconfig.py
index 642cfa60b..7691772ce 100755
--- a/customer_portal/src/epilot/models/shared/portalconfig.py
+++ b/customer_portal/src/epilot/models/shared/portalconfig.py
@@ -2,89 +2,226 @@
from __future__ import annotations
import dataclasses
+from ..shared import adminuser as shared_adminuser
+from ..shared import emailtemplates as shared_emailtemplates
+from ..shared import entityslug as shared_entityslug
from ..shared import grant as shared_grant
-from ..shared import origin_enum as shared_origin_enum
+from ..shared import origin as shared_origin
from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
from epilot import utils
-from typing import Any, Optional
+from typing import List, Optional
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class PortalConfigCognitoDetails:
+ r"""AWS Cognito Pool details for the portal"""
+ cognito_user_pool_arn: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('cognito_user_pool_arn'), 'exclude': lambda f: f is None }})
+ r"""Cognito user pool ARN"""
+ cognito_user_pool_client_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('cognito_user_pool_client_id'), 'exclude': lambda f: f is None }})
+ r"""Cognito user pool client ID"""
+ cognito_user_pool_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('cognito_user_pool_id'), 'exclude': lambda f: f is None }})
+ r"""Cognito user pool ID"""
- cognito_user_pool_arn: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('cognito_user_pool_arn'), 'exclude': lambda f: f is None }})
- cognito_user_pool_client_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('cognito_user_pool_client_id'), 'exclude': lambda f: f is None }})
- cognito_user_pool_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('cognito_user_pool_id'), 'exclude': lambda f: f is None }})
-
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
-class PortalConfigEmailTemplates:
-
- confirm_account: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('confirmAccount'), 'exclude': lambda f: f is None }})
- forgot_password: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('forgotPassword'), 'exclude': lambda f: f is None }})
- invitation: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('invitation'), 'exclude': lambda f: f is None }})
+class PortalConfigDefaultUserToNotify:
+ r"""Default 360 user to notify upon an internal notification"""
+ on_pending_user: Optional[List[shared_adminuser.AdminUser]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('onPendingUser'), 'exclude': lambda f: f is None }})
+ r"""Default admin users for pending user notification to notify"""
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class PortalConfigEntityActionsActionLabel:
-
- de: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('de'), 'exclude': lambda f: f is None }})
- en: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('en'), 'exclude': lambda f: f is None }})
+ de: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('de'), 'exclude': lambda f: f is None }})
+ en: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('en'), 'exclude': lambda f: f is None }})
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class PortalConfigEntityActions:
+ action_label: Optional[PortalConfigEntityActionsActionLabel] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('action_Label'), 'exclude': lambda f: f is None }})
+ journey_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('journey_id'), 'exclude': lambda f: f is None }})
+ slug: Optional[shared_entityslug.EntitySlug] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('slug'), 'exclude': lambda f: f is None }})
+ r"""URL-friendly identifier for the entity schema"""
+
+
+
+class PortalConfigEntityEditRulesCadencePeriodType(str, Enum):
+ DAYS = 'days'
+ WEEKS = 'weeks'
+ MONTHS = 'months'
+
+class PortalConfigEntityEditRulesRuleType(str, Enum):
+ CADENCE = 'cadence'
+ RELATIVE_TO_CURRENT_VALUE = 'relative_to_current_value'
+ DAYS_BEFORE_DATE = 'days_before_date'
+ OVERDUE_PAYMENTS = 'overdue_payments'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class PortalConfigEntityEditRules:
+ allowed_decrement: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('allowed_decrement'), 'exclude': lambda f: f is None }})
+ allowed_increment: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('allowed_increment'), 'exclude': lambda f: f is None }})
+ attribute: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('attribute'), 'exclude': lambda f: f is None }})
+ cadence_period: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('cadence_period'), 'exclude': lambda f: f is None }})
+ cadence_period_type: Optional[PortalConfigEntityEditRulesCadencePeriodType] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('cadence_period_type'), 'exclude': lambda f: f is None }})
+ changes_allowed: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('changes_allowed'), 'exclude': lambda f: f is None }})
+ grace_period: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('grace_period'), 'exclude': lambda f: f is None }})
+ number_of_days_before_restriction: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('number_of_days_before_restriction'), 'exclude': lambda f: f is None }})
+ rule_type: Optional[PortalConfigEntityEditRulesRuleType] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('rule_type'), 'exclude': lambda f: f is None }})
+ slug: Optional[shared_entityslug.EntitySlug] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('slug'), 'exclude': lambda f: f is None }})
+ r"""URL-friendly identifier for the entity schema"""
- action_label: Optional[PortalConfigEntityActionsActionLabel] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('action_Label'), 'exclude': lambda f: f is None }})
- journey_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('journey_id'), 'exclude': lambda f: f is None }})
- slug: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('slug'), 'exclude': lambda f: f is None }})
- r"""URL-friendly identifier for the entity schema"""
+
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class PortalConfigEntityIdentifiersType:
+ attributes: Optional[List[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('attributes'), 'exclude': lambda f: f is None }})
+ r"""Attributes used to identify an entity"""
+ is_enabled: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('isEnabled'), 'exclude': lambda f: f is None }})
+ r"""Enable/Disable the entity identifier"""
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class PortalConfigEntityIdentifiers:
+ r"""Identifiers used to identify an entity by a portal user"""
+ type: Optional[PortalConfigEntityIdentifiersType] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }})
- attributes: Optional[list[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('attributes'), 'exclude': lambda f: f is None }})
- is_enabled: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('isEnabled'), 'exclude': lambda f: f is None }})
+
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class PortalConfigFeatureSettings:
+ r"""Feature settings for the portal"""
+ billing: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('billing'), 'exclude': lambda f: f is None }})
+ r"""Billing feature flag"""
+ start_page: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_page'), 'exclude': lambda f: f is None }})
+ r"""Start page feature flag"""
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class PortalConfigImages:
+ r"""Teaser & Banner Image web links"""
+ order_left_teaser: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('orderLeftTeaser') }})
+ r"""URL of the order left teaser image"""
+ order_right_teaser: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('orderRightTeaser') }})
+ r"""URL of the order right teaser image"""
+ welcome_banner: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('welcomeBanner') }})
+ r"""URL of the welcome banner image"""
- order_left_teaser: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('orderLeftTeaser'), 'exclude': lambda f: f is None }})
- order_right_teaser: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('orderRightTeaser'), 'exclude': lambda f: f is None }})
- welcome_banner: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('welcomeBanner'), 'exclude': lambda f: f is None }})
+
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class PortalConfigOrgSettingsCanary:
+ r"""Canary feature flag"""
+ enabled: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('enabled'), 'exclude': lambda f: f is None }})
+ r"""Enable/Disable the canary feature"""
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
-class PortalConfig:
- r"""ok"""
+class PortalConfigOrgSettingsReleaseCandidate:
+ r"""Release candidate settings"""
+ enabled: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('enabled'), 'exclude': lambda f: f is None }})
+ r"""Enable/Disable the release candidate feature"""
+
+
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class PortalConfigOrgSettings:
+ r"""Organization settings"""
+ canary: Optional[PortalConfigOrgSettingsCanary] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('canary'), 'exclude': lambda f: f is None }})
+ r"""Canary feature flag"""
+ release_candidate: Optional[PortalConfigOrgSettingsReleaseCandidate] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('release_candidate'), 'exclude': lambda f: f is None }})
+ r"""Release candidate settings"""
- cognito_details: Optional[PortalConfigCognitoDetails] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('cognito_details'), 'exclude': lambda f: f is None }})
- config: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('config'), 'exclude': lambda f: f is None }})
- contact_secondary_identifier: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('contact_secondary_identifier'), 'exclude': lambda f: f is None }})
- default_user_to_notify: Optional[dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('default_user_to_notify'), 'exclude': lambda f: f is None }})
- design_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('design_id'), 'exclude': lambda f: f is None }})
- email_templates: Optional[PortalConfigEmailTemplates] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('email_templates'), 'exclude': lambda f: f is None }})
- enabled: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('enabled'), 'exclude': lambda f: f is None }})
- entity_actions: Optional[list[PortalConfigEntityActions]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity_actions'), 'exclude': lambda f: f is None }})
- entity_identifiers: Optional[dict[str, PortalConfigEntityIdentifiers]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity_identifiers'), 'exclude': lambda f: f is None }})
- grants: Optional[list[shared_grant.Grant]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('grants'), 'exclude': lambda f: f is None }})
+
+
+class PortalConfigSelfRegistrationSetting(str, Enum):
+ ALLOW_WITH_CONTACT_CREATION = 'ALLOW_WITH_CONTACT_CREATION'
+ ALLOW_WITHOUT_CONTACT_CREATION = 'ALLOW_WITHOUT_CONTACT_CREATION'
+ DENY = 'DENY'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class PortalConfig:
+ design_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('design_id') }})
+ r"""ID of the design used to build the portal"""
+ cognito_details: Optional[PortalConfigCognitoDetails] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('cognito_details'), 'exclude': lambda f: f is None }})
+ r"""AWS Cognito Pool details for the portal"""
+ config: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('config'), 'exclude': lambda f: f is None }})
+ r"""Stringified object with configuration details"""
+ contact_identifiers: Optional[List[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('contact_identifiers'), 'exclude': lambda f: f is None }})
+ r"""Identifiers to identify a contact."""
+ contact_secondary_identifier: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('contact_secondary_identifier'), 'exclude': lambda f: f is None }})
+ r"""Secondary identifier to identify a contact other than the email
+
+ Deprecated field: This will be removed in a future release, please migrate away from it as soon as possible.
+ """
+ default_user_to_notify: Optional[PortalConfigDefaultUserToNotify] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('default_user_to_notify'), 'exclude': lambda f: f is None }})
+ r"""Default 360 user to notify upon an internal notification"""
+ domain: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('domain'), 'exclude': lambda f: f is None }})
+ r"""The URL on which the portal is accessible"""
+ email_templates: Optional[shared_emailtemplates.EmailTemplates] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('email_templates'), 'exclude': lambda f: f is None }})
+ r"""Email templates used for authentication and internal processes"""
+ enabled: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('enabled'), 'exclude': lambda f: f is None }})
+ r"""Enable/Disable the portal access"""
+ entity_actions: Optional[List[PortalConfigEntityActions]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity_actions'), 'exclude': lambda f: f is None }})
+ r"""Journey actions allowed on an entity by a portal user"""
+ entity_edit_rules: Optional[List[PortalConfigEntityEditRules]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity_edit_rules'), 'exclude': lambda f: f is None }})
+ r"""Rules for editing an entity by a portal user"""
+ entity_identifiers: Optional[PortalConfigEntityIdentifiers] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity_identifiers'), 'exclude': lambda f: f is None }})
+ r"""Identifiers used to identify an entity by a portal user"""
+ feature_settings: Optional[PortalConfigFeatureSettings] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('feature_settings'), 'exclude': lambda f: f is None }})
+ r"""Feature settings for the portal"""
+ grants: Optional[List[shared_grant.Grant]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('grants'), 'exclude': lambda f: f is None }})
+ r"""Permissions granted to a portal user while accessing entities"""
id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }})
- r"""ID of the organization"""
- images: Optional[PortalConfigImages] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('images'), 'exclude': lambda f: f is None }})
- is_epilot_domain: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('is_epilot_domain'), 'exclude': lambda f: f is None }})
- name: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name'), 'exclude': lambda f: f is None }})
- org_name: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('org_name'), 'exclude': lambda f: f is None }})
- origin: Optional[shared_origin_enum.OriginEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('origin'), 'exclude': lambda f: f is None }})
- r"""Origin of the portal"""
+ r"""ID of the organization"""
+ images: Optional[PortalConfigImages] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('images'), 'exclude': lambda f: f is None }})
+ r"""Teaser & Banner Image web links"""
+ is_epilot_domain: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('is_epilot_domain'), 'exclude': lambda f: f is None }})
+ r"""Mark true if the domain is an Epilot domain"""
+ name: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name'), 'exclude': lambda f: f is None }})
+ r"""A short name to identify your portal"""
+ org_name: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('org_name'), 'exclude': lambda f: f is None }})
+ r"""Name of the organization"""
+ org_settings: Optional[PortalConfigOrgSettings] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('org_settings'), 'exclude': lambda f: f is None }})
+ r"""Organization settings"""
+ origin: Optional[shared_origin.Origin] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('origin'), 'exclude': lambda f: f is None }})
+ r"""Origin of the portal"""
self_registration: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('self_registration'), 'exclude': lambda f: f is None }})
- r"""Whether portal user has self registration"""
-
\ No newline at end of file
+ r"""Allow portal user self-registration without a mapped contact
+
+ Deprecated field: This will be removed in a future release, please migrate away from it as soon as possible.
+ """
+ self_registration_setting: Optional[PortalConfigSelfRegistrationSetting] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('self_registration_setting'), 'exclude': lambda f: f is None }})
+
+
diff --git a/customer_portal/src/epilot/models/shared/portaluser.py b/customer_portal/src/epilot/models/shared/portaluser.py
new file mode 100755
index 000000000..869bc02b5
--- /dev/null
+++ b/customer_portal/src/epilot/models/shared/portaluser.py
@@ -0,0 +1,35 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import dateutil.parser
+from dataclasses_json import Undefined, dataclass_json
+from datetime import datetime
+from enum import Enum
+from epilot import utils
+from typing import Any, Dict, List, Optional
+
+class PortalUserSchema(str, Enum):
+ PORTAL_USER = 'portal_user'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class PortalUser:
+ r"""The portal user entity"""
+ created_at: datetime = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_created_at'), 'encoder': utils.datetimeisoformat(False), 'decoder': dateutil.parser.isoparse }})
+ r"""Creation timestamp of the entity"""
+ id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_id') }})
+ r"""Entity ID"""
+ org: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_org') }})
+ r"""Organization ID the entity belongs to"""
+ schema: PortalUserSchema = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_schema') }})
+ title: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_title') }})
+ r"""Title of the entity"""
+ updated_at: datetime = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_updated_at'), 'encoder': utils.datetimeisoformat(False), 'decoder': dateutil.parser.isoparse }})
+ r"""Last update timestamp of the entity"""
+ tags: Optional[List[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_tags'), 'exclude': lambda f: f is None }})
+ r"""Array of entity tags"""
+ additional_properties: Optional[Dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: f is None }})
+
+
diff --git a/customer_portal/src/epilot/models/shared/product.py b/customer_portal/src/epilot/models/shared/product.py
new file mode 100755
index 000000000..6890ce0c7
--- /dev/null
+++ b/customer_portal/src/epilot/models/shared/product.py
@@ -0,0 +1,35 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import dateutil.parser
+from dataclasses_json import Undefined, dataclass_json
+from datetime import datetime
+from enum import Enum
+from epilot import utils
+from typing import Any, Dict, List, Optional
+
+class ProductSchema(str, Enum):
+ PRODUCT = 'product'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class Product:
+ r"""The product entity"""
+ created_at: datetime = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_created_at'), 'encoder': utils.datetimeisoformat(False), 'decoder': dateutil.parser.isoparse }})
+ r"""Creation timestamp of the entity"""
+ id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_id') }})
+ r"""Entity ID"""
+ org: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_org') }})
+ r"""Organization ID the entity belongs to"""
+ schema: ProductSchema = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_schema') }})
+ title: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_title') }})
+ r"""Title of the entity"""
+ updated_at: datetime = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_updated_at'), 'encoder': utils.datetimeisoformat(False), 'decoder': dateutil.parser.isoparse }})
+ r"""Last update timestamp of the entity"""
+ tags: Optional[List[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_tags'), 'exclude': lambda f: f is None }})
+ r"""Array of entity tags"""
+ additional_properties: Optional[Dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: f is None }})
+
+
diff --git a/customer_portal/src/epilot/models/shared/saveentityfile.py b/customer_portal/src/epilot/models/shared/saveentityfile.py
index f9bfd50ed..6e0096adf 100755
--- a/customer_portal/src/epilot/models/shared/saveentityfile.py
+++ b/customer_portal/src/epilot/models/shared/saveentityfile.py
@@ -5,39 +5,50 @@
from dataclasses_json import Undefined, dataclass_json
from enum import Enum
from epilot import utils
-from typing import Optional
+from typing import List, Optional
-class SaveEntityFileFilesAccessControlEnum(str, Enum):
- PRIVATE = "private"
- PUBLIC_READ = "public-read"
+class SaveEntityFileFilesAccessControl(str, Enum):
+ r"""Access control level for the file"""
+ PRIVATE = 'private'
+ PUBLIC_READ = 'public-read'
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class SaveEntityFileFilesS3ref:
+ bucket: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('bucket') }})
+ r"""S3 bucket name"""
+ key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('key') }})
+ r"""S3 key"""
- bucket: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('bucket') }})
- key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('key') }})
-
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class SaveEntityFileFiles:
-
- filename: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('filename') }})
- s3ref: SaveEntityFileFilesS3ref = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('s3ref') }})
- tags: Optional[list[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_tags'), 'exclude': lambda f: f is None }})
- access_control: Optional[SaveEntityFileFilesAccessControlEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('access_control'), 'exclude': lambda f: f is None }})
- document_type: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('document_type'), 'exclude': lambda f: f is None }})
- file_entity_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('file_entity_id'), 'exclude': lambda f: f is None }})
+ filename: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('filename') }})
+ r"""File name"""
+ s3ref: SaveEntityFileFilesS3ref = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('s3ref') }})
+ tags: Optional[List[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_tags'), 'exclude': lambda f: f is None }})
+ r"""Array of file tags"""
+ access_control: Optional[SaveEntityFileFilesAccessControl] = dataclasses.field(default=SaveEntityFileFilesAccessControl.PRIVATE, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('access_control'), 'exclude': lambda f: f is None }})
+ r"""Access control level for the file"""
+ document_type: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('document_type'), 'exclude': lambda f: f is None }})
+ r"""Document type"""
+ file_entity_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('file_entity_id'), 'exclude': lambda f: f is None }})
+ r"""File entity ID"""
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class SaveEntityFile:
- r"""Save file"""
+ entity_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity_id') }})
+ r"""Entity ID"""
+ entity_type: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity_type') }})
+ r"""Entity type"""
+ files: List[SaveEntityFileFiles] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('files') }})
- entity_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity_id') }})
- entity_type: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity_type') }})
- files: list[SaveEntityFileFiles] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('files') }})
-
\ No newline at end of file
+
diff --git a/customer_portal/src/epilot/models/shared/saveportalfile.py b/customer_portal/src/epilot/models/shared/saveportalfile.py
index e2e3bb31c..321eedf82 100755
--- a/customer_portal/src/epilot/models/shared/saveportalfile.py
+++ b/customer_portal/src/epilot/models/shared/saveportalfile.py
@@ -2,36 +2,42 @@
from __future__ import annotations
import dataclasses
-from ..shared import origin_enum as shared_origin_enum
+from ..shared import origin as shared_origin
from dataclasses_json import Undefined, dataclass_json
from epilot import utils
-from typing import Optional
+from typing import List, Optional
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class SavePortalFileFilesS3ref:
+ bucket: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('bucket') }})
+ r"""S3 bucket name"""
+ key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('key') }})
+ r"""S3 key"""
- bucket: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('bucket') }})
- key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('key') }})
-
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class SavePortalFileFiles:
-
- file_type: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('file_type') }})
- tags: Optional[list[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_tags'), 'exclude': lambda f: f is None }})
- filename: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('filename'), 'exclude': lambda f: f is None }})
- s3ref: Optional[SavePortalFileFilesS3ref] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('s3ref'), 'exclude': lambda f: f is None }})
+ file_type: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('file_type') }})
+ r"""File type"""
+ tags: Optional[List[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_tags'), 'exclude': lambda f: f is None }})
+ r"""Array of file tags"""
+ filename: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('filename'), 'exclude': lambda f: f is None }})
+ r"""File name"""
+ s3ref: Optional[SavePortalFileFilesS3ref] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('s3ref'), 'exclude': lambda f: f is None }})
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class SavePortalFile:
- r"""Save portal file"""
+ files: List[SavePortalFileFiles] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('files') }})
+ origin: shared_origin.Origin = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('origin') }})
+ r"""Origin of the portal"""
- files: list[SavePortalFileFiles] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('files') }})
- origin: shared_origin_enum.OriginEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('origin') }})
- r"""Origin of the portal"""
-
\ No newline at end of file
+
diff --git a/customer_portal/src/epilot/models/shared/schema.py b/customer_portal/src/epilot/models/shared/schema.py
new file mode 100755
index 000000000..3f88da1ad
--- /dev/null
+++ b/customer_portal/src/epilot/models/shared/schema.py
@@ -0,0 +1,17 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from epilot import utils
+from typing import Any, Dict, Optional
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class Schema:
+ additional_properties: Optional[Dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: f is None }})
+ slug: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('slug'), 'exclude': lambda f: f is None }})
+ r"""Slug of the schema"""
+
+
diff --git a/customer_portal/src/epilot/models/shared/security.py b/customer_portal/src/epilot/models/shared/security.py
index 600363405..c485555c2 100755
--- a/customer_portal/src/epilot/models/shared/security.py
+++ b/customer_portal/src/epilot/models/shared/security.py
@@ -7,8 +7,7 @@
@dataclasses.dataclass
class Security:
+ epilot_auth: Optional[str] = dataclasses.field(default=None, metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
+ portal_auth: Optional[str] = dataclasses.field(default=None, metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
- as_customer: Optional[str] = dataclasses.field(default=None, metadata={'security': { 'scheme': True, 'type': 'apiKey', 'sub_type': 'header', 'field_name': 'x-portal-id' }})
- as_organization: Optional[str] = dataclasses.field(default=None, metadata={'security': { 'scheme': True, 'type': 'apiKey', 'sub_type': 'header', 'field_name': 'x-ivy-org-id' }})
- portal_auth: Optional[str] = dataclasses.field(default=None, metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
-
\ No newline at end of file
+
diff --git a/customer_portal/src/epilot/models/shared/teaserwidget.py b/customer_portal/src/epilot/models/shared/teaserwidget.py
new file mode 100755
index 000000000..e6eb7e2d7
--- /dev/null
+++ b/customer_portal/src/epilot/models/shared/teaserwidget.py
@@ -0,0 +1,66 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from epilot import utils
+from typing import Optional
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class TeaserWidgetButtonLabel:
+ de: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('de'), 'exclude': lambda f: f is None }})
+ en: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('en'), 'exclude': lambda f: f is None }})
+
+
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class TeaserWidgetButton:
+ label: Optional[TeaserWidgetButtonLabel] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('label'), 'exclude': lambda f: f is None }})
+ url: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('url'), 'exclude': lambda f: f is None }})
+
+
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class TeaserWidgetHeadline:
+ de: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('de'), 'exclude': lambda f: f is None }})
+ en: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('en'), 'exclude': lambda f: f is None }})
+
+
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class TeaserWidgetSubHeadline:
+ de: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('de'), 'exclude': lambda f: f is None }})
+ en: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('en'), 'exclude': lambda f: f is None }})
+
+
+
+class TeaserWidgetType(str, Enum):
+ ACTION_WIDGET = 'ACTION_WIDGET'
+ CONTENT_WIDGET = 'CONTENT_WIDGET'
+ ENTITY_WIDGET = 'ENTITY_WIDGET'
+ TEASER_WIDGET = 'TEASER_WIDGET'
+ DOCUMENT_WIDGET = 'DOCUMENT_WIDGET'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class TeaserWidget:
+ id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id') }})
+ list_index: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('listIndex') }})
+ r"""Index of the widget in the list, used for ordering (left or right)"""
+ type: TeaserWidgetType = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type') }})
+ button: Optional[TeaserWidgetButton] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('button'), 'exclude': lambda f: f is None }})
+ headline: Optional[TeaserWidgetHeadline] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('headline'), 'exclude': lambda f: f is None }})
+ image_url: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('imageUrl'), 'exclude': lambda f: f is None }})
+ sub_headline: Optional[TeaserWidgetSubHeadline] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('subHeadline'), 'exclude': lambda f: f is None }})
+
+
diff --git a/customer_portal/src/epilot/models/shared/upsertportalconfig.py b/customer_portal/src/epilot/models/shared/upsertportalconfig.py
index 505adc5a8..ce6ee820b 100755
--- a/customer_portal/src/epilot/models/shared/upsertportalconfig.py
+++ b/customer_portal/src/epilot/models/shared/upsertportalconfig.py
@@ -2,83 +2,185 @@
from __future__ import annotations
import dataclasses
+from ..shared import adminuser as shared_adminuser
+from ..shared import emailtemplates as shared_emailtemplates
+from ..shared import entityslug as shared_entityslug
from ..shared import grant as shared_grant
from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
from epilot import utils
-from typing import Any, Optional
+from typing import List, Optional
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class UpsertPortalConfigCognitoDetails:
+ r"""AWS Cognito Pool details for the portal"""
+ cognito_user_pool_arn: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('cognito_user_pool_arn'), 'exclude': lambda f: f is None }})
+ r"""Cognito user pool ARN"""
+ cognito_user_pool_client_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('cognito_user_pool_client_id'), 'exclude': lambda f: f is None }})
+ r"""Cognito user pool client ID"""
+ cognito_user_pool_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('cognito_user_pool_id'), 'exclude': lambda f: f is None }})
+ r"""Cognito user pool ID"""
- cognito_user_pool_arn: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('cognito_user_pool_arn'), 'exclude': lambda f: f is None }})
- cognito_user_pool_client_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('cognito_user_pool_client_id'), 'exclude': lambda f: f is None }})
- cognito_user_pool_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('cognito_user_pool_id'), 'exclude': lambda f: f is None }})
-
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
-class UpsertPortalConfigEmailTemplates:
-
- confirm_account: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('confirmAccount'), 'exclude': lambda f: f is None }})
- forgot_password: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('forgotPassword'), 'exclude': lambda f: f is None }})
- invitation: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('invitation'), 'exclude': lambda f: f is None }})
+class UpsertPortalConfigDefaultUserToNotify:
+ r"""Default 360 user to notify upon an internal notification"""
+ on_pending_user: Optional[List[shared_adminuser.AdminUser]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('onPendingUser'), 'exclude': lambda f: f is None }})
+ r"""Default admin users for pending user notification to notify"""
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class UpsertPortalConfigEntityActionsActionLabel:
+ de: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('de'), 'exclude': lambda f: f is None }})
+ en: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('en'), 'exclude': lambda f: f is None }})
- de: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('de'), 'exclude': lambda f: f is None }})
- en: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('en'), 'exclude': lambda f: f is None }})
-
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class UpsertPortalConfigEntityActions:
+ action_label: Optional[UpsertPortalConfigEntityActionsActionLabel] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('action_Label'), 'exclude': lambda f: f is None }})
+ journey_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('journey_id'), 'exclude': lambda f: f is None }})
+ slug: Optional[shared_entityslug.EntitySlug] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('slug'), 'exclude': lambda f: f is None }})
+ r"""URL-friendly identifier for the entity schema"""
+
+
+
+class UpsertPortalConfigEntityEditRulesCadencePeriodType(str, Enum):
+ DAYS = 'days'
+ WEEKS = 'weeks'
+ MONTHS = 'months'
+
+class UpsertPortalConfigEntityEditRulesRuleType(str, Enum):
+ CADENCE = 'cadence'
+ RELATIVE_TO_CURRENT_VALUE = 'relative_to_current_value'
+ DAYS_BEFORE_DATE = 'days_before_date'
+ OVERDUE_PAYMENTS = 'overdue_payments'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class UpsertPortalConfigEntityEditRules:
+ allowed_decrement: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('allowed_decrement'), 'exclude': lambda f: f is None }})
+ allowed_increment: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('allowed_increment'), 'exclude': lambda f: f is None }})
+ attribute: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('attribute'), 'exclude': lambda f: f is None }})
+ cadence_period: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('cadence_period'), 'exclude': lambda f: f is None }})
+ cadence_period_type: Optional[UpsertPortalConfigEntityEditRulesCadencePeriodType] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('cadence_period_type'), 'exclude': lambda f: f is None }})
+ changes_allowed: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('changes_allowed'), 'exclude': lambda f: f is None }})
+ grace_period: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('grace_period'), 'exclude': lambda f: f is None }})
+ number_of_days_before_restriction: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('number_of_days_before_restriction'), 'exclude': lambda f: f is None }})
+ rule_type: Optional[UpsertPortalConfigEntityEditRulesRuleType] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('rule_type'), 'exclude': lambda f: f is None }})
+ slug: Optional[shared_entityslug.EntitySlug] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('slug'), 'exclude': lambda f: f is None }})
+ r"""URL-friendly identifier for the entity schema"""
- action_label: Optional[UpsertPortalConfigEntityActionsActionLabel] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('action_Label'), 'exclude': lambda f: f is None }})
- journey_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('journey_id'), 'exclude': lambda f: f is None }})
- slug: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('slug'), 'exclude': lambda f: f is None }})
- r"""URL-friendly identifier for the entity schema"""
+
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class UpsertPortalConfigEntityIdentifiersType:
+ attributes: Optional[List[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('attributes'), 'exclude': lambda f: f is None }})
+ r"""Attributes used to identify an entity"""
+ is_enabled: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('isEnabled'), 'exclude': lambda f: f is None }})
+ r"""Enable/Disable the entity identifier"""
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class UpsertPortalConfigEntityIdentifiers:
+ r"""Identifiers used to identify an entity by a portal user"""
+ type: Optional[UpsertPortalConfigEntityIdentifiersType] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }})
- attributes: Optional[list[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('attributes'), 'exclude': lambda f: f is None }})
- is_enabled: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('isEnabled'), 'exclude': lambda f: f is None }})
+
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class UpsertPortalConfigFeatureSettings:
+ r"""Feature settings for the portal"""
+ billing: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('billing'), 'exclude': lambda f: f is None }})
+ r"""Billing feature flag"""
+ start_page: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_page'), 'exclude': lambda f: f is None }})
+ r"""Start page feature flag"""
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class UpsertPortalConfigImages:
+ r"""Teaser & Banner Image web links"""
+ order_left_teaser: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('orderLeftTeaser') }})
+ r"""URL of the order left teaser image"""
+ order_right_teaser: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('orderRightTeaser') }})
+ r"""URL of the order right teaser image"""
+ welcome_banner: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('welcomeBanner') }})
+ r"""URL of the welcome banner image"""
- order_left_teaser: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('orderLeftTeaser'), 'exclude': lambda f: f is None }})
- order_right_teaser: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('orderRightTeaser'), 'exclude': lambda f: f is None }})
- welcome_banner: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('welcomeBanner'), 'exclude': lambda f: f is None }})
-
+
+
+class UpsertPortalConfigSelfRegistrationSetting(str, Enum):
+ ALLOW_WITH_CONTACT_CREATION = 'ALLOW_WITH_CONTACT_CREATION'
+ ALLOW_WITHOUT_CONTACT_CREATION = 'ALLOW_WITHOUT_CONTACT_CREATION'
+ DENY = 'DENY'
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class UpsertPortalConfig:
- r"""Portal payload"""
-
- cognito_details: Optional[UpsertPortalConfigCognitoDetails] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('cognito_details'), 'exclude': lambda f: f is None }})
- config: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('config'), 'exclude': lambda f: f is None }})
- contact_secondary_identifier: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('contact_secondary_identifier'), 'exclude': lambda f: f is None }})
- default_user_to_notify: Optional[dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('default_user_to_notify'), 'exclude': lambda f: f is None }})
- design_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('design_id'), 'exclude': lambda f: f is None }})
- email_templates: Optional[UpsertPortalConfigEmailTemplates] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('email_templates'), 'exclude': lambda f: f is None }})
- enabled: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('enabled'), 'exclude': lambda f: f is None }})
- entity_actions: Optional[list[UpsertPortalConfigEntityActions]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity_actions'), 'exclude': lambda f: f is None }})
- entity_identifiers: Optional[dict[str, UpsertPortalConfigEntityIdentifiers]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity_identifiers'), 'exclude': lambda f: f is None }})
- grants: Optional[list[shared_grant.Grant]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('grants'), 'exclude': lambda f: f is None }})
- images: Optional[UpsertPortalConfigImages] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('images'), 'exclude': lambda f: f is None }})
- is_epilot_domain: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('is_epilot_domain'), 'exclude': lambda f: f is None }})
- name: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name'), 'exclude': lambda f: f is None }})
+ design_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('design_id') }})
+ r"""ID of the design used to build the portal"""
+ cognito_details: Optional[UpsertPortalConfigCognitoDetails] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('cognito_details'), 'exclude': lambda f: f is None }})
+ r"""AWS Cognito Pool details for the portal"""
+ config: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('config'), 'exclude': lambda f: f is None }})
+ r"""Stringified object with configuration details"""
+ contact_identifiers: Optional[List[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('contact_identifiers'), 'exclude': lambda f: f is None }})
+ r"""Identifiers to identify a contact."""
+ contact_secondary_identifier: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('contact_secondary_identifier'), 'exclude': lambda f: f is None }})
+ r"""Secondary identifier to identify a contact other than the email
+
+ Deprecated field: This will be removed in a future release, please migrate away from it as soon as possible.
+ """
+ default_user_to_notify: Optional[UpsertPortalConfigDefaultUserToNotify] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('default_user_to_notify'), 'exclude': lambda f: f is None }})
+ r"""Default 360 user to notify upon an internal notification"""
+ domain: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('domain'), 'exclude': lambda f: f is None }})
+ r"""The URL on which the portal is accessible"""
+ email_templates: Optional[shared_emailtemplates.EmailTemplates] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('email_templates'), 'exclude': lambda f: f is None }})
+ r"""Email templates used for authentication and internal processes"""
+ enabled: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('enabled'), 'exclude': lambda f: f is None }})
+ r"""Enable/Disable the portal access"""
+ entity_actions: Optional[List[UpsertPortalConfigEntityActions]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity_actions'), 'exclude': lambda f: f is None }})
+ r"""Journey actions allowed on an entity by a portal user"""
+ entity_edit_rules: Optional[List[UpsertPortalConfigEntityEditRules]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity_edit_rules'), 'exclude': lambda f: f is None }})
+ r"""Rules for editing an entity by a portal user"""
+ entity_identifiers: Optional[UpsertPortalConfigEntityIdentifiers] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity_identifiers'), 'exclude': lambda f: f is None }})
+ r"""Identifiers used to identify an entity by a portal user"""
+ feature_settings: Optional[UpsertPortalConfigFeatureSettings] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('feature_settings'), 'exclude': lambda f: f is None }})
+ r"""Feature settings for the portal"""
+ grants: Optional[List[shared_grant.Grant]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('grants'), 'exclude': lambda f: f is None }})
+ r"""Permissions granted to a portal user while accessing entities"""
+ images: Optional[UpsertPortalConfigImages] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('images'), 'exclude': lambda f: f is None }})
+ r"""Teaser & Banner Image web links"""
+ is_epilot_domain: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('is_epilot_domain'), 'exclude': lambda f: f is None }})
+ r"""Mark true if the domain is an Epilot domain"""
+ name: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name'), 'exclude': lambda f: f is None }})
+ r"""A short name to identify your portal"""
self_registration: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('self_registration'), 'exclude': lambda f: f is None }})
- r"""Whether portal user has self registration"""
-
\ No newline at end of file
+ r"""Allow portal user self-registration without a mapped contact
+
+ Deprecated field: This will be removed in a future release, please migrate away from it as soon as possible.
+ """
+ self_registration_setting: Optional[UpsertPortalConfigSelfRegistrationSetting] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('self_registration_setting'), 'exclude': lambda f: f is None }})
+
+
diff --git a/customer_portal/src/epilot/models/shared/upsertportalwidget.py b/customer_portal/src/epilot/models/shared/upsertportalwidget.py
new file mode 100755
index 000000000..8a29dfee8
--- /dev/null
+++ b/customer_portal/src/epilot/models/shared/upsertportalwidget.py
@@ -0,0 +1,20 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from ..shared import actionwidget as shared_actionwidget
+from ..shared import contentwidget as shared_contentwidget
+from ..shared import entitywidget as shared_entitywidget
+from ..shared import teaserwidget as shared_teaserwidget
+from ..shared import widgetbase as shared_widgetbase
+from dataclasses_json import Undefined, dataclass_json
+from epilot import utils
+from typing import List, Union
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class UpsertPortalWidget:
+ widgets: List[Union[shared_entitywidget.EntityWidget, shared_contentwidget.ContentWidget, shared_actionwidget.ActionWidget, shared_teaserwidget.TeaserWidget, shared_widgetbase.WidgetBase]] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('widgets') }})
+
+
diff --git a/customer_portal/src/epilot/models/shared/useractivationpayload.py b/customer_portal/src/epilot/models/shared/useractivationpayload.py
deleted file mode 100755
index e69cc5c11..000000000
--- a/customer_portal/src/epilot/models/shared/useractivationpayload.py
+++ /dev/null
@@ -1,18 +0,0 @@
-"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
-
-from __future__ import annotations
-import dataclasses
-from dataclasses_json import Undefined, dataclass_json
-from epilot import utils
-from typing import Optional
-
-
-@dataclass_json(undefined=Undefined.EXCLUDE)
-@dataclasses.dataclass
-class UserActivationPayload:
-
- display_name: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('display_name'), 'exclude': lambda f: f is None }})
- r"""User's display name (default: email address)"""
- password: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('password'), 'exclude': lambda f: f is None }})
- r"""User's password"""
-
\ No newline at end of file
diff --git a/customer_portal/src/epilot/models/shared/widgetaction.py b/customer_portal/src/epilot/models/shared/widgetaction.py
new file mode 100755
index 000000000..31b3f4d23
--- /dev/null
+++ b/customer_portal/src/epilot/models/shared/widgetaction.py
@@ -0,0 +1,43 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from epilot import utils
+from typing import List, Optional
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class WidgetActionLabel:
+ de: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('de'), 'exclude': lambda f: f is None }})
+ en: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('en'), 'exclude': lambda f: f is None }})
+
+
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class WidgetActionRules:
+ attribute: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('attribute') }})
+ attribute_value: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('attribute_value') }})
+ entity: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity') }})
+
+
+
+class WidgetActionType(str, Enum):
+ LINK = 'link'
+ JOURNEY = 'journey'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class WidgetAction:
+ id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_id') }})
+ label: WidgetActionLabel = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('label') }})
+ type: WidgetActionType = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type') }})
+ url: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('url') }})
+ rules: Optional[List[WidgetActionRules]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('rules'), 'exclude': lambda f: f is None }})
+
+
diff --git a/customer_portal/src/epilot/models/shared/widgetbase.py b/customer_portal/src/epilot/models/shared/widgetbase.py
new file mode 100755
index 000000000..e81cfba51
--- /dev/null
+++ b/customer_portal/src/epilot/models/shared/widgetbase.py
@@ -0,0 +1,46 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from epilot import utils
+from typing import Optional
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class WidgetBaseHeadline:
+ de: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('de'), 'exclude': lambda f: f is None }})
+ en: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('en'), 'exclude': lambda f: f is None }})
+
+
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class WidgetBaseSubHeadline:
+ de: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('de'), 'exclude': lambda f: f is None }})
+ en: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('en'), 'exclude': lambda f: f is None }})
+
+
+
+class WidgetBaseType(str, Enum):
+ ACTION_WIDGET = 'ACTION_WIDGET'
+ CONTENT_WIDGET = 'CONTENT_WIDGET'
+ ENTITY_WIDGET = 'ENTITY_WIDGET'
+ TEASER_WIDGET = 'TEASER_WIDGET'
+ DOCUMENT_WIDGET = 'DOCUMENT_WIDGET'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class WidgetBase:
+ id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id') }})
+ list_index: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('listIndex') }})
+ r"""Index of the widget in the list, used for ordering (left or right)"""
+ type: WidgetBaseType = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type') }})
+ headline: Optional[WidgetBaseHeadline] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('headline'), 'exclude': lambda f: f is None }})
+ sub_headline: Optional[WidgetBaseSubHeadline] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('subHeadline'), 'exclude': lambda f: f is None }})
+
+
diff --git a/customer_portal/src/epilot/public.py b/customer_portal/src/epilot/public.py
index 62698c049..e23601fc4 100755
--- a/customer_portal/src/epilot/public.py
+++ b/customer_portal/src/epilot/public.py
@@ -1,124 +1,144 @@
"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
-import requests as requests_http
-from . import utils
-from epilot.models import operations, shared
-from typing import Any, Optional
+from .sdkconfiguration import SDKConfiguration
+from epilot import utils
+from epilot.models import errors, operations, shared
+from typing import Optional
class Public:
- r"""Public"""
- _client: requests_http.Session
- _security_client: requests_http.Session
- _server_url: str
- _language: str
- _sdk_version: str
- _gen_version: str
-
- def __init__(self, client: requests_http.Session, security_client: requests_http.Session, server_url: str, language: str, sdk_version: str, gen_version: str) -> None:
- self._client = client
- self._security_client = security_client
- self._server_url = server_url
- self._language = language
- self._sdk_version = sdk_version
- self._gen_version = gen_version
-
- def activate_user(self, request: operations.ActivateUserRequest) -> operations.ActivateUserResponse:
- r"""activateUser
- Activates the user
- """
- base_url = self._server_url
+ r"""Public APIs"""
+ sdk_configuration: SDKConfiguration
+
+ def __init__(self, sdk_config: SDKConfiguration) -> None:
+ self.sdk_configuration = sdk_config
- url = base_url.removesuffix('/') + '/v2/portal/public/activate'
+
+ def confirm_user(self, request: operations.ConfirmUserRequest) -> operations.ConfirmUserResponse:
+ r"""confirmUser
+ Confirm a portal user
+ """
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
+ url = utils.generate_url(operations.ConfirmUserRequest, base_url, '/v2/portal/user/confirm/{id}', request)
headers = {}
- req_content_type, data, form = utils.serialize_request_body(request, "user_activation_payload", 'json')
- if req_content_type not in ('multipart/form-data', 'multipart/mixed'):
- headers['content-type'] = req_content_type
- query_params = utils.get_query_params(operations.ActivateUserRequest, request)
+ query_params = utils.get_query_params(operations.ConfirmUserRequest, request)
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
- client = self._security_client
+ client = self.sdk_configuration.security_client
- http_res = client.request('POST', url, params=query_params, data=data, files=form, headers=headers)
+ http_res = client.request('GET', url, params=query_params, headers=headers)
content_type = http_res.headers.get('Content-Type')
- res = operations.ActivateUserResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
+ res = operations.ConfirmUserResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
- if http_res.status_code in [200, 404]:
+ if http_res.status_code == 301:
pass
+ elif http_res.status_code == 500:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[shared.ErrorResp])
+ res.error_resp = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
return res
- def confirm_user(self, request: operations.ConfirmUserRequest) -> operations.ConfirmUserResponse:
- r"""confirmUser
- TODO
+
+ def create_user(self, request: operations.CreateUserRequest) -> operations.CreateUserResponse:
+ r"""createUser
+ Registers a portal user
"""
- base_url = self._server_url
-
- url = utils.generate_url(operations.ConfirmUserRequest, base_url, '/v2/portal/user/confirm/{id}', request)
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
- query_params = utils.get_query_params(operations.ConfirmUserRequest, request)
+ url = base_url + '/v2/portal/public/user'
+ headers = {}
+ req_content_type, data, form = utils.serialize_request_body(request, "create_user_request", False, False, 'json')
+ if req_content_type not in ('multipart/form-data', 'multipart/mixed'):
+ headers['content-type'] = req_content_type
+ if data is None and form is None:
+ raise Exception('request body is required')
+ query_params = utils.get_query_params(operations.CreateUserRequest, request)
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
- client = self._security_client
+ client = self.sdk_configuration.security_client
- http_res = client.request('GET', url, params=query_params)
+ http_res = client.request('POST', url, params=query_params, data=data, files=form, headers=headers)
content_type = http_res.headers.get('Content-Type')
- res = operations.ConfirmUserResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
+ res = operations.CreateUserResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
- if http_res.status_code == 200:
+ if http_res.status_code == 201:
if utils.match_content_type(content_type, 'application/json'):
- out = utils.unmarshal_json(http_res.text, Optional[dict[str, Any]])
- res.entity_item = out
+ out = utils.unmarshal_json(http_res.text, Optional[operations.CreateUser201ApplicationJSON])
+ res.create_user_201_application_json_object = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
+ elif http_res.status_code in [400, 500]:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[shared.ErrorResp])
+ res.error_resp = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
return res
- def create_user(self, request: operations.CreateUserRequest) -> operations.CreateUserResponse:
- r"""creates a user
- Creates a user in cognito pool and db item
+
+ def get_contact_count(self, request: operations.GetContactCountRequest) -> operations.GetContactCountResponse:
+ r"""getContactCount
+ Check existence of contacts.
"""
- base_url = self._server_url
-
- url = base_url.removesuffix('/') + '/v2/portal/public/user'
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
+ url = base_url + '/v2/portal/public/contact/count'
headers = {}
- req_content_type, data, form = utils.serialize_request_body(request, "request_body", 'json')
+ req_content_type, data, form = utils.serialize_request_body(request, "contact_count_request", False, False, 'json')
if req_content_type not in ('multipart/form-data', 'multipart/mixed'):
headers['content-type'] = req_content_type
if data is None and form is None:
raise Exception('request body is required')
- query_params = utils.get_query_params(operations.CreateUserRequest, request)
+ query_params = utils.get_query_params(operations.GetContactCountRequest, request)
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
- client = self._security_client
+ client = self.sdk_configuration.security_client
http_res = client.request('POST', url, params=query_params, data=data, files=form, headers=headers)
content_type = http_res.headers.get('Content-Type')
- res = operations.CreateUserResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
+ res = operations.GetContactCountResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
- if http_res.status_code == 201:
+ if http_res.status_code == 200:
if utils.match_content_type(content_type, 'application/json'):
- out = utils.unmarshal_json(http_res.text, Optional[shared.AddPortalResp])
- res.add_portal_resp = out
- elif http_res.status_code in [400, 401, 500]:
+ out = utils.unmarshal_json(http_res.text, Optional[operations.GetContactCount200ApplicationJSON])
+ res.get_contact_count_200_application_json_object = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
+ elif http_res.status_code in [400, 404, 500]:
if utils.match_content_type(content_type, 'application/json'):
out = utils.unmarshal_json(http_res.text, Optional[shared.ErrorResp])
res.error_resp = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
return res
+
def get_count_by_email(self, request: operations.GetCountByEmailRequest) -> operations.GetCountByEmailResponse:
r"""getCountByEmail
Check Contact by email
"""
- base_url = self._server_url
-
- url = base_url.removesuffix('/') + '/v2/portal/contact/email/count'
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
+ url = base_url + '/v2/portal/contact/email/count'
+ headers = {}
query_params = utils.get_query_params(operations.GetCountByEmailRequest, request)
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
- client = self._security_client
+ client = self.sdk_configuration.security_client
- http_res = client.request('GET', url, params=query_params)
+ http_res = client.request('GET', url, params=query_params, headers=headers)
content_type = http_res.headers.get('Content-Type')
res = operations.GetCountByEmailResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
@@ -127,22 +147,138 @@ def get_count_by_email(self, request: operations.GetCountByEmailRequest) -> oper
if utils.match_content_type(content_type, 'application/json'):
out = utils.unmarshal_json(http_res.text, Optional[operations.GetCountByEmail200ApplicationJSON])
res.get_count_by_email_200_application_json_object = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
+ elif http_res.status_code == 500:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[shared.ErrorResp])
+ res.error_resp = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
return res
+
+ def get_portal_config_by_domain(self, request: operations.GetPortalConfigByDomainRequest) -> operations.GetPortalConfigByDomainResponse:
+ r"""getPortalConfigByDomain
+ Retrieves the portal configuration by domain.
+ """
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
+
+ url = base_url + '/v2/portal/public/config'
+ headers = {}
+ query_params = utils.get_query_params(operations.GetPortalConfigByDomainRequest, request)
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
+
+ client = self.sdk_configuration.security_client
+
+ http_res = client.request('GET', url, params=query_params, headers=headers)
+ content_type = http_res.headers.get('Content-Type')
+
+ res = operations.GetPortalConfigByDomainResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
+
+ if http_res.status_code == 200:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[shared.PortalConfig])
+ res.portal_config = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
+ elif http_res.status_code == 500:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[shared.ErrorResp])
+ res.error_resp = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
+
+ return res
+
+
+ def get_public_portal_config(self, request: operations.GetPublicPortalConfigRequest) -> operations.GetPublicPortalConfigResponse:
+ r"""getPublicPortalConfig
+ Retrieves the public portal configuration.
+ """
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
+
+ url = base_url + '/v2/portal/public/portal/config'
+ headers = {}
+ query_params = utils.get_query_params(operations.GetPublicPortalConfigRequest, request)
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
+
+ client = self.sdk_configuration.security_client
+
+ http_res = client.request('GET', url, params=query_params, headers=headers)
+ content_type = http_res.headers.get('Content-Type')
+
+ res = operations.GetPublicPortalConfigResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
+
+ if http_res.status_code == 200:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[shared.PortalConfig])
+ res.portal_config = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
+ elif http_res.status_code == 500:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[shared.ErrorResp])
+ res.error_resp = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
+
+ return res
+
+
+ def get_public_portal_widgets(self, request: operations.GetPublicPortalWidgetsRequest) -> operations.GetPublicPortalWidgetsResponse:
+ r"""getPublicPortalWidgets
+ Retrieves the public widgets of a portal
+ """
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
+
+ url = base_url + '/v2/portal/public-widgets'
+ headers = {}
+ query_params = utils.get_query_params(operations.GetPublicPortalWidgetsRequest, request)
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
+
+ client = self.sdk_configuration.security_client
+
+ http_res = client.request('GET', url, params=query_params, headers=headers)
+ content_type = http_res.headers.get('Content-Type')
+
+ res = operations.GetPublicPortalWidgetsResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
+
+ if http_res.status_code == 200:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[shared.UpsertPortalWidget])
+ res.upsert_portal_widget = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
+ elif http_res.status_code in [401, 403, 500]:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[shared.ErrorResp])
+ res.error_resp = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
+
+ return res
+
+
def user_exists(self, request: operations.UserExistsRequest) -> operations.UserExistsResponse:
r"""userExists
- Checks whether a user exists in the customer portal
+ Checks whether a user exists in the portal
"""
- base_url = self._server_url
-
- url = base_url.removesuffix('/') + '/v2/portal/public/user/exists'
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
+ url = base_url + '/v2/portal/public/user/exists'
+ headers = {}
query_params = utils.get_query_params(operations.UserExistsRequest, request)
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
- client = self._security_client
+ client = self.sdk_configuration.security_client
- http_res = client.request('GET', url, params=query_params)
+ http_res = client.request('GET', url, params=query_params, headers=headers)
content_type = http_res.headers.get('Content-Type')
res = operations.UserExistsResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
@@ -151,10 +287,14 @@ def user_exists(self, request: operations.UserExistsRequest) -> operations.UserE
if utils.match_content_type(content_type, 'application/json'):
out = utils.unmarshal_json(http_res.text, Optional[operations.UserExists200ApplicationJSON])
res.user_exists_200_application_json_object = out
- elif http_res.status_code == 404:
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
+ elif http_res.status_code == 500:
if utils.match_content_type(content_type, 'application/json'):
- out = utils.unmarshal_json(http_res.text, Optional[operations.UserExists404ApplicationJSON])
- res.user_exists_404_application_json_object = out
+ out = utils.unmarshal_json(http_res.text, Optional[shared.ErrorResp])
+ res.error_resp = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
return res
diff --git a/customer_portal/src/epilot/sdk.py b/customer_portal/src/epilot/sdk.py
index 5b7e98f49..ea30d4519 100755
--- a/customer_portal/src/epilot/sdk.py
+++ b/customer_portal/src/epilot/sdk.py
@@ -1,93 +1,71 @@
"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
import requests as requests_http
-from . import utils
+from .activity import Activity
+from .balance import Balance
from .ecp import Ecp
from .ecp_admin import ECPAdmin
from .public import Public
+from .sdkconfiguration import SDKConfiguration
+from epilot import utils
from epilot.models import shared
-
-SERVERS = [
- "https://customer-portal-api.sls.epilot.io",
-]
-"""Contains the list of servers available to the SDK"""
+from typing import Dict
class Epilot:
- r"""Backend for epilot end customer portals"""
+ r"""Portal API: Backend for epilot portals - End Customer Portal & Installer Portal"""
+ activity: Activity
+ balance: Balance
ecp: Ecp
- r"""ECP"""
+ r"""APIs defined for a portal user"""
ecp_admin: ECPAdmin
- r"""ECP Admin"""
+ r"""APIs defined for a ECP Admin"""
public: Public
- r"""Public"""
+ r"""Public APIs"""
- _client: requests_http.Session
- _security_client: requests_http.Session
- _server_url: str = SERVERS[0]
- _language: str = "python"
- _sdk_version: str = "1.2.2"
- _gen_version: str = "2.16.5"
+ sdk_configuration: SDKConfiguration
def __init__(self,
security: shared.Security = None,
+ server_idx: int = None,
server_url: str = None,
- url_params: dict[str, str] = None,
- client: requests_http.Session = None
+ url_params: Dict[str, str] = None,
+ client: requests_http.Session = None,
+ retry_config: utils.RetryConfig = None
) -> None:
"""Instantiates the SDK configuring it with the provided parameters.
:param security: The security details required for authentication
:type security: shared.Security
+ :param server_idx: The index of the server to use for all operations
+ :type server_idx: int
:param server_url: The server URL to use for all operations
:type server_url: str
:param url_params: Parameters to optionally template the server URL with
- :type url_params: dict[str, str]
+ :type url_params: Dict[str, str]
:param client: The requests.Session HTTP client to use for all operations
- :type client: requests_http.Session
+ :type client: requests_http.Session
+ :param retry_config: The utils.RetryConfig to use globally
+ :type retry_config: utils.RetryConfig
"""
- self._client = requests_http.Session()
+ if client is None:
+ client = requests_http.Session()
- if server_url is not None:
- if url_params is not None:
- self._server_url = utils.template_url(server_url, url_params)
- else:
- self._server_url = server_url
-
- if client is not None:
- self._client = client
+ security_client = utils.configure_security_client(client, security)
- self._security_client = utils.configure_security_client(self._client, security)
+ if server_url is not None:
+ if url_params is not None:
+ server_url = utils.template_url(server_url, url_params)
+ self.sdk_configuration = SDKConfiguration(client, security_client, server_url, server_idx, retry_config=retry_config)
+
self._init_sdks()
def _init_sdks(self):
- self.ecp = Ecp(
- self._client,
- self._security_client,
- self._server_url,
- self._language,
- self._sdk_version,
- self._gen_version
- )
-
- self.ecp_admin = ECPAdmin(
- self._client,
- self._security_client,
- self._server_url,
- self._language,
- self._sdk_version,
- self._gen_version
- )
-
- self.public = Public(
- self._client,
- self._security_client,
- self._server_url,
- self._language,
- self._sdk_version,
- self._gen_version
- )
-
+ self.activity = Activity(self.sdk_configuration)
+ self.balance = Balance(self.sdk_configuration)
+ self.ecp = Ecp(self.sdk_configuration)
+ self.ecp_admin = ECPAdmin(self.sdk_configuration)
+ self.public = Public(self.sdk_configuration)
\ No newline at end of file
diff --git a/customer_portal/src/epilot/sdkconfiguration.py b/customer_portal/src/epilot/sdkconfiguration.py
new file mode 100755
index 000000000..a8d437036
--- /dev/null
+++ b/customer_portal/src/epilot/sdkconfiguration.py
@@ -0,0 +1,34 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+import requests
+from dataclasses import dataclass
+from typing import Dict, Tuple
+from .utils.retries import RetryConfig
+from .utils import utils
+
+
+SERVERS = [
+ 'https://customer-portal-api.sls.epilot.io',
+]
+"""Contains the list of servers available to the SDK"""
+
+@dataclass
+class SDKConfiguration:
+ client: requests.Session
+ security_client: requests.Session
+ server_url: str = ''
+ server_idx: int = 0
+ language: str = 'python'
+ openapi_doc_version: str = '1.0.0'
+ sdk_version: str = '2.1.5'
+ gen_version: str = '2.173.0'
+ user_agent: str = 'speakeasy-sdk/python 2.1.5 2.173.0 1.0.0 epilot-customer-portal'
+ retry_config: RetryConfig = None
+
+ def get_server_details(self) -> Tuple[str, Dict[str, str]]:
+ if self.server_url:
+ return utils.remove_suffix(self.server_url, '/'), {}
+ if self.server_idx is None:
+ self.server_idx = 0
+
+ return SERVERS[self.server_idx], {}
diff --git a/customer_portal/src/epilot/utils/retries.py b/customer_portal/src/epilot/utils/retries.py
index c6251d948..25f49a1f2 100755
--- a/customer_portal/src/epilot/utils/retries.py
+++ b/customer_portal/src/epilot/utils/retries.py
@@ -2,6 +2,7 @@
import random
import time
+from typing import List
import requests
@@ -24,16 +25,17 @@ class RetryConfig:
backoff: BackoffStrategy
retry_connection_errors: bool
- def __init__(self, strategy: str, retry_connection_errors: bool):
+ def __init__(self, strategy: str, backoff: BackoffStrategy, retry_connection_errors: bool):
self.strategy = strategy
+ self.backoff = backoff
self.retry_connection_errors = retry_connection_errors
class Retries:
config: RetryConfig
- status_codes: list[str]
+ status_codes: List[str]
- def __init__(self, config: RetryConfig, status_codes: list[str]):
+ def __init__(self, config: RetryConfig, status_codes: List[str]):
self.config = config
self.status_codes = status_codes
diff --git a/customer_portal/src/epilot/utils/utils.py b/customer_portal/src/epilot/utils/utils.py
index 9d4fba324..3ab126104 100755
--- a/customer_portal/src/epilot/utils/utils.py
+++ b/customer_portal/src/epilot/utils/utils.py
@@ -3,11 +3,14 @@
import base64
import json
import re
+import sys
from dataclasses import Field, dataclass, fields, is_dataclass, make_dataclass
from datetime import date, datetime
+from decimal import Decimal
from email.message import Message
from enum import Enum
-from typing import Any, Callable, Optional, Tuple, Union, get_args, get_origin
+from typing import (Any, Callable, Dict, List, Optional, Tuple, Union,
+ get_args, get_origin)
from xmlrpc.client import boolean
import dateutil.parser
@@ -17,14 +20,14 @@
class SecurityClient:
client: requests.Session
- query_params: dict[str, str] = {}
+ query_params: Dict[str, str] = {}
def __init__(self, client: requests.Session):
self.client = client
def request(self, method, url, **kwargs):
params = kwargs.get('params', {})
- kwargs["params"] = self.query_params | params
+ kwargs["params"] = {**self.query_params, **params}
return self.client.request(method, url, **kwargs)
@@ -67,7 +70,7 @@ def _parse_security_option(client: SecurityClient, option: dataclass):
client, metadata, getattr(option, opt_field.name))
-def _parse_security_scheme(client: SecurityClient, scheme_metadata: dict, scheme: any):
+def _parse_security_scheme(client: SecurityClient, scheme_metadata: Dict, scheme: any):
scheme_type = scheme_metadata.get('type')
sub_type = scheme_metadata.get('sub_type')
@@ -91,7 +94,7 @@ def _parse_security_scheme(client: SecurityClient, scheme_metadata: dict, scheme
client, scheme_metadata, scheme_metadata, scheme)
-def _parse_security_scheme_value(client: SecurityClient, scheme_metadata: dict, security_metadata: dict, value: any):
+def _parse_security_scheme_value(client: SecurityClient, scheme_metadata: Dict, security_metadata: Dict, value: any):
scheme_type = scheme_metadata.get('type')
sub_type = scheme_metadata.get('sub_type')
@@ -112,7 +115,8 @@ def _parse_security_scheme_value(client: SecurityClient, scheme_metadata: dict,
client.client.headers[header_name] = value
elif scheme_type == 'http':
if sub_type == 'bearer':
- client.client.headers[header_name] = value
+ client.client.headers[header_name] = value.lower().startswith(
+ 'bearer ') and value or f'Bearer {value}'
else:
raise Exception('not supported')
else:
@@ -141,7 +145,8 @@ def _parse_basic_auth_scheme(client: SecurityClient, scheme: dataclass):
client.client.headers['Authorization'] = f'Basic {base64.b64encode(data).decode()}'
-def generate_url(clazz: type, server_url: str, path: str, path_params: dataclass, gbls: dict[str, dict[str, dict[str, Any]]] = None) -> str:
+def generate_url(clazz: type, server_url: str, path: str, path_params: dataclass,
+ gbls: Dict[str, Dict[str, Dict[str, Any]]] = None) -> str:
path_param_fields: Tuple[Field, ...] = fields(clazz)
for field in path_param_fields:
request_metadata = field.metadata.get('request')
@@ -152,71 +157,80 @@ def generate_url(clazz: type, server_url: str, path: str, path_params: dataclass
if param_metadata is None:
continue
- if param_metadata.get('style', 'simple') == 'simple':
- param = getattr(
- path_params, field.name) if path_params is not None else None
- param = _populate_from_globals(
- field.name, param, 'pathParam', gbls)
-
- if param is None:
- continue
-
- if isinstance(param, list):
- pp_vals: list[str] = []
- for pp_val in param:
- if pp_val is None:
- continue
- pp_vals.append(_val_to_string(pp_val))
- path = path.replace(
- '{' + param_metadata.get('field_name', field.name) + '}', ",".join(pp_vals), 1)
- elif isinstance(param, dict):
- pp_vals: list[str] = []
- for pp_key in param:
- if param[pp_key] is None:
- continue
- if param_metadata.get('explode'):
- pp_vals.append(
- f"{pp_key}={_val_to_string(param[pp_key])}")
- else:
- pp_vals.append(
- f"{pp_key},{_val_to_string(param[pp_key])}")
- path = path.replace(
- '{' + param_metadata.get('field_name', field.name) + '}', ",".join(pp_vals), 1)
- elif not isinstance(param, (str, int, float, complex, bool)):
- pp_vals: list[str] = []
- param_fields: Tuple[Field, ...] = fields(param)
- for param_field in param_fields:
- param_value_metadata = param_field.metadata.get(
- 'path_param')
- if not param_value_metadata:
- continue
+ param = getattr(
+ path_params, field.name) if path_params is not None else None
+ param = _populate_from_globals(
+ field.name, param, 'pathParam', gbls)
- parm_name = param_value_metadata.get(
- 'field_name', field.name)
+ if param is None:
+ continue
- param_field_val = getattr(param, param_field.name)
- if param_field_val is None:
- continue
- if param_metadata.get('explode'):
- pp_vals.append(
- f"{parm_name}={_val_to_string(param_field_val)}")
- else:
- pp_vals.append(
- f"{parm_name},{_val_to_string(param_field_val)}")
- path = path.replace(
- '{' + param_metadata.get('field_name', field.name) + '}', ",".join(pp_vals), 1)
- else:
+ f_name = param_metadata.get("field_name", field.name)
+ serialization = param_metadata.get('serialization', '')
+ if serialization != '':
+ serialized_params = _get_serialized_params(
+ param_metadata, f_name, param)
+ for key, value in serialized_params.items():
path = path.replace(
- '{' + param_metadata.get('field_name', field.name) + '}', _val_to_string(param), 1)
+ '{' + key + '}', value, 1)
+ else:
+ if param_metadata.get('style', 'simple') == 'simple':
+ if isinstance(param, List):
+ pp_vals: List[str] = []
+ for pp_val in param:
+ if pp_val is None:
+ continue
+ pp_vals.append(_val_to_string(pp_val))
+ path = path.replace(
+ '{' + param_metadata.get('field_name', field.name) + '}', ",".join(pp_vals), 1)
+ elif isinstance(param, Dict):
+ pp_vals: List[str] = []
+ for pp_key in param:
+ if param[pp_key] is None:
+ continue
+ if param_metadata.get('explode'):
+ pp_vals.append(
+ f"{pp_key}={_val_to_string(param[pp_key])}")
+ else:
+ pp_vals.append(
+ f"{pp_key},{_val_to_string(param[pp_key])}")
+ path = path.replace(
+ '{' + param_metadata.get('field_name', field.name) + '}', ",".join(pp_vals), 1)
+ elif not isinstance(param, (str, int, float, complex, bool, Decimal)):
+ pp_vals: List[str] = []
+ param_fields: Tuple[Field, ...] = fields(param)
+ for param_field in param_fields:
+ param_value_metadata = param_field.metadata.get(
+ 'path_param')
+ if not param_value_metadata:
+ continue
+
+ parm_name = param_value_metadata.get(
+ 'field_name', field.name)
+
+ param_field_val = getattr(param, param_field.name)
+ if param_field_val is None:
+ continue
+ if param_metadata.get('explode'):
+ pp_vals.append(
+ f"{parm_name}={_val_to_string(param_field_val)}")
+ else:
+ pp_vals.append(
+ f"{parm_name},{_val_to_string(param_field_val)}")
+ path = path.replace(
+ '{' + param_metadata.get('field_name', field.name) + '}', ",".join(pp_vals), 1)
+ else:
+ path = path.replace(
+ '{' + param_metadata.get('field_name', field.name) + '}', _val_to_string(param), 1)
- return server_url.removesuffix("/") + path
+ return remove_suffix(server_url, '/') + path
def is_optional(field):
return get_origin(field) is Union and type(None) in get_args(field)
-def template_url(url_with_params: str, params: dict[str, str]) -> str:
+def template_url(url_with_params: str, params: Dict[str, str]) -> str:
for key, value in params.items():
url_with_params = url_with_params.replace(
'{' + key + '}', value)
@@ -224,8 +238,9 @@ def template_url(url_with_params: str, params: dict[str, str]) -> str:
return url_with_params
-def get_query_params(clazz: type, query_params: dataclass, gbls: dict[str, dict[str, dict[str, Any]]] = None) -> dict[str, list[str]]:
- params: dict[str, list[str]] = {}
+def get_query_params(clazz: type, query_params: dataclass, gbls: Dict[str, Dict[str, Dict[str, Any]]] = None) -> Dict[
+ str, List[str]]:
+ params: Dict[str, List[str]] = {}
param_fields: Tuple[Field, ...] = fields(clazz)
for field in param_fields:
@@ -246,26 +261,33 @@ def get_query_params(clazz: type, query_params: dataclass, gbls: dict[str, dict[
f_name = metadata.get("field_name")
serialization = metadata.get('serialization', '')
if serialization != '':
- params = params | _get_serialized_query_params(
- metadata, f_name, value)
+ serialized_parms = _get_serialized_params(metadata, f_name, value)
+ for key, value in serialized_parms.items():
+ if key in params:
+ params[key].extend(value)
+ else:
+ params[key] = [value]
else:
style = metadata.get('style', 'form')
if style == 'deepObject':
- params = params | _get_deep_object_query_params(
- metadata, f_name, value)
+ params = {**params, **_get_deep_object_query_params(
+ metadata, f_name, value)}
elif style == 'form':
- params = params | _get_form_query_params(
- metadata, f_name, value)
+ params = {**params, **_get_delimited_query_params(
+ metadata, f_name, value, ",")}
+ elif style == 'pipeDelimited':
+ params = {**params, **_get_delimited_query_params(
+ metadata, f_name, value, "|")}
else:
raise Exception('not yet implemented')
return params
-def get_headers(headers_params: dataclass) -> dict[str, str]:
+def get_headers(headers_params: dataclass) -> Dict[str, str]:
if headers_params is None:
return {}
- headers: dict[str, str] = {}
+ headers: Dict[str, str] = {}
param_fields: Tuple[Field, ...] = fields(headers_params)
for field in param_fields:
@@ -282,8 +304,8 @@ def get_headers(headers_params: dataclass) -> dict[str, str]:
return headers
-def _get_serialized_query_params(metadata: dict, field_name: str, obj: any) -> dict[str, list[str]]:
- params: dict[str, list[str]] = {}
+def _get_serialized_params(metadata: Dict, field_name: str, obj: any) -> Dict[str, str]:
+ params: Dict[str, str] = {}
serialization = metadata.get('serialization', '')
if serialization == 'json':
@@ -292,8 +314,8 @@ def _get_serialized_query_params(metadata: dict, field_name: str, obj: any) -> d
return params
-def _get_deep_object_query_params(metadata: dict, field_name: str, obj: any) -> dict[str, list[str]]:
- params: dict[str, list[str]] = {}
+def _get_deep_object_query_params(metadata: Dict, field_name: str, obj: any) -> Dict[str, List[str]]:
+ params: Dict[str, List[str]] = {}
if obj is None:
return params
@@ -309,27 +331,30 @@ def _get_deep_object_query_params(metadata: dict, field_name: str, obj: any) ->
if obj_val is None:
continue
- if isinstance(obj_val, list):
+ if isinstance(obj_val, List):
for val in obj_val:
if val is None:
continue
- if params.get(f'{metadata.get("field_name", field_name)}[{obj_param_metadata.get("field_name", obj_field.name)}]') is None:
- params[f'{metadata.get("field_name", field_name)}[{obj_param_metadata.get("field_name", obj_field.name)}]'] = [
+ if params.get(
+ f'{metadata.get("field_name", field_name)}[{obj_param_metadata.get("field_name", obj_field.name)}]') is None:
+ params[
+ f'{metadata.get("field_name", field_name)}[{obj_param_metadata.get("field_name", obj_field.name)}]'] = [
]
params[
- f'{metadata.get("field_name", field_name)}[{obj_param_metadata.get("field_name", obj_field.name)}]'].append(_val_to_string(val))
+ f'{metadata.get("field_name", field_name)}[{obj_param_metadata.get("field_name", obj_field.name)}]'].append(
+ _val_to_string(val))
else:
params[
f'{metadata.get("field_name", field_name)}[{obj_param_metadata.get("field_name", obj_field.name)}]'] = [
_val_to_string(obj_val)]
- elif isinstance(obj, dict):
+ elif isinstance(obj, Dict):
for key, value in obj.items():
if value is None:
continue
- if isinstance(value, list):
+ if isinstance(value, List):
for val in value:
if val is None:
continue
@@ -355,28 +380,36 @@ def _get_query_param_field_name(obj_field: Field) -> str:
return obj_param_metadata.get("field_name", obj_field.name)
-def _get_form_query_params(metadata: dict, field_name: str, obj: any) -> dict[str, list[str]]:
- return _populate_form(field_name, metadata.get("explode", True), obj, _get_query_param_field_name)
+def _get_delimited_query_params(metadata: Dict, field_name: str, obj: any, delimiter: str) -> Dict[
+ str, List[str]]:
+ return _populate_form(field_name, metadata.get("explode", True), obj, _get_query_param_field_name, delimiter)
SERIALIZATION_METHOD_TO_CONTENT_TYPE = {
- 'json': 'application/json',
- 'form': 'application/x-www-form-urlencoded',
+ 'json': 'application/json',
+ 'form': 'application/x-www-form-urlencoded',
'multipart': 'multipart/form-data',
- 'raw': 'application/octet-stream',
- 'string': 'text/plain',
+ 'raw': 'application/octet-stream',
+ 'string': 'text/plain',
}
-def serialize_request_body(request: dataclass, request_field_name: str, serialization_method: str) -> Tuple[str, any, any]:
+def serialize_request_body(request: dataclass, request_field_name: str, nullable: bool, optional: bool, serialization_method: str, encoder=None) -> Tuple[
+ str, any, any]:
if request is None:
- return None, None, None, None
+ if not nullable and optional:
+ return None, None, None
if not is_dataclass(request) or not hasattr(request, request_field_name):
- return serialize_content_type(request_field_name, SERIALIZATION_METHOD_TO_CONTENT_TYPE[serialization_method], request)
+ return serialize_content_type(request_field_name, SERIALIZATION_METHOD_TO_CONTENT_TYPE[serialization_method],
+ request, encoder)
request_val = getattr(request, request_field_name)
+ if request_val is None:
+ if not nullable and optional:
+ return None, None, None
+
request_fields: Tuple[Field, ...] = fields(request)
request_metadata = None
@@ -388,12 +421,13 @@ def serialize_request_body(request: dataclass, request_field_name: str, serializ
if request_metadata is None:
raise Exception('invalid request type')
- return serialize_content_type(request_field_name, request_metadata.get('media_type', 'application/octet-stream'), request_val)
+ return serialize_content_type(request_field_name, request_metadata.get('media_type', 'application/octet-stream'),
+ request_val)
-def serialize_content_type(field_name: str, media_type: str, request: dataclass) -> Tuple[str, any, list[list[any]]]:
+def serialize_content_type(field_name: str, media_type: str, request: dataclass, encoder=None) -> Tuple[str, any, List[List[any]]]:
if re.match(r'(application|text)\/.*?\+*json.*', media_type) is not None:
- return media_type, marshal_json(request), None
+ return media_type, marshal_json(request, encoder), None
if re.match(r'multipart\/.*', media_type) is not None:
return serialize_multipart_form(media_type, request)
if re.match(r'application\/x-www-form-urlencoded.*', media_type) is not None:
@@ -407,8 +441,8 @@ def serialize_content_type(field_name: str, media_type: str, request: dataclass)
f"invalid request body type {type(request)} for mediaType {media_type}")
-def serialize_multipart_form(media_type: str, request: dataclass) -> Tuple[str, any, list[list[any]]]:
- form: list[list[any]] = []
+def serialize_multipart_form(media_type: str, request: dataclass) -> Tuple[str, any, List[List[any]]]:
+ form: List[List[any]] = []
request_fields = fields(request)
for field in request_fields:
@@ -449,7 +483,7 @@ def serialize_multipart_form(media_type: str, request: dataclass) -> Tuple[str,
else:
field_name = field_metadata.get(
"field_name", field.name)
- if isinstance(val, list):
+ if isinstance(val, List):
for value in val:
if value is None:
continue
@@ -460,8 +494,8 @@ def serialize_multipart_form(media_type: str, request: dataclass) -> Tuple[str,
return media_type, None, form
-def serialize_dict(original: dict, explode: bool, field_name, existing: Optional[dict[str, list[str]]]) -> dict[
- str, list[str]]:
+def serialize_dict(original: Dict, explode: bool, field_name, existing: Optional[Dict[str, List[str]]]) -> Dict[
+ str, List[str]]:
if existing is None:
existing = []
@@ -481,8 +515,8 @@ def serialize_dict(original: dict, explode: bool, field_name, existing: Optional
return existing
-def serialize_form_data(field_name: str, data: dataclass) -> dict[str, any]:
- form: dict[str, list[str]] = {}
+def serialize_form_data(field_name: str, data: dataclass) -> Dict[str, any]:
+ form: Dict[str, List[str]] = {}
if is_dataclass(data):
for field in fields(data):
@@ -500,12 +534,12 @@ def serialize_form_data(field_name: str, data: dataclass) -> dict[str, any]:
form[field_name] = [marshal_json(val)]
else:
if metadata.get('style', 'form') == 'form':
- form = form | _populate_form(
- field_name, metadata.get('explode', True), val, _get_form_field_name)
+ form = {**form, **_populate_form(
+ field_name, metadata.get('explode', True), val, _get_form_field_name, ",")}
else:
raise Exception(
f'Invalid form style for field {field.name}')
- elif isinstance(data, dict):
+ elif isinstance(data, Dict):
for key, value in data.items():
form[key] = [_val_to_string(value)]
else:
@@ -523,8 +557,9 @@ def _get_form_field_name(obj_field: Field) -> str:
return obj_param_metadata.get("field_name", obj_field.name)
-def _populate_form(field_name: str, explode: boolean, obj: any, get_field_name_func: Callable) -> dict[str, list[str]]:
- params: dict[str, list[str]] = {}
+def _populate_form(field_name: str, explode: boolean, obj: any, get_field_name_func: Callable, delimiter: str) -> \
+ Dict[str, List[str]]:
+ params: Dict[str, List[str]] = {}
if obj is None:
return params
@@ -546,11 +581,11 @@ def _populate_form(field_name: str, explode: boolean, obj: any, get_field_name_f
params[obj_field_name] = [_val_to_string(val)]
else:
items.append(
- f'{obj_field_name},{_val_to_string(val)}')
+ f'{obj_field_name}{delimiter}{_val_to_string(val)}')
if len(items) > 0:
- params[field_name] = [','.join(items)]
- elif isinstance(obj, dict):
+ params[field_name] = [delimiter.join(items)]
+ elif isinstance(obj, Dict):
items = []
for key, value in obj.items():
if value is None:
@@ -559,11 +594,11 @@ def _populate_form(field_name: str, explode: boolean, obj: any, get_field_name_f
if explode:
params[key] = _val_to_string(value)
else:
- items.append(f'{key},{_val_to_string(value)}')
+ items.append(f'{key}{delimiter}{_val_to_string(value)}')
if len(items) > 0:
- params[field_name] = [','.join(items)]
- elif isinstance(obj, list):
+ params[field_name] = [delimiter.join(items)]
+ elif isinstance(obj, List):
items = []
for value in obj:
@@ -578,7 +613,8 @@ def _populate_form(field_name: str, explode: boolean, obj: any, get_field_name_f
items.append(_val_to_string(value))
if len(items) > 0:
- params[field_name] = [','.join([str(item) for item in items])]
+ params[field_name] = [delimiter.join(
+ [str(item) for item in items])]
else:
params[field_name] = [_val_to_string(obj)]
@@ -616,7 +652,7 @@ def _serialize_header(explode: bool, obj: any) -> str:
if len(items) > 0:
return ','.join(items)
- elif isinstance(obj, dict):
+ elif isinstance(obj, Dict):
items = []
for key, value in obj.items():
@@ -631,7 +667,7 @@ def _serialize_header(explode: bool, obj: any) -> str:
if len(items) > 0:
return ','.join([str(item) for item in items])
- elif isinstance(obj, list):
+ elif isinstance(obj, List):
items = []
for value in obj:
@@ -648,20 +684,28 @@ def _serialize_header(explode: bool, obj: any) -> str:
return ''
-def unmarshal_json(data, typ):
- unmarhsal = make_dataclass('Unmarhsal', [('res', typ)],
+def unmarshal_json(data, typ, decoder=None):
+ unmarshal = make_dataclass('Unmarshal', [('res', typ)],
bases=(DataClassJsonMixin,))
json_dict = json.loads(data)
- out = unmarhsal.from_dict({"res": json_dict})
- return out.res
+ try:
+ out = unmarshal.from_dict({"res": json_dict})
+ except AttributeError as attr_err:
+ raise AttributeError(
+ f'unable to unmarshal {data} as {typ}') from attr_err
+
+ return out.res if decoder is None else decoder(out.res)
-def marshal_json(val):
+def marshal_json(val, encoder=None):
marshal = make_dataclass('Marshal', [('res', type(val))],
bases=(DataClassJsonMixin,))
marshaller = marshal(res=val)
json_dict = marshaller.to_dict()
- return json.dumps(json_dict["res"])
+
+ val = json_dict["res"] if encoder is None else encoder(json_dict["res"])
+
+ return json.dumps(val)
def match_content_type(content_type: str, pattern: str) -> boolean:
@@ -705,6 +749,106 @@ def datefromisoformat(date_str: str):
return dateutil.parser.parse(date_str).date()
+def bigintencoder(optional: bool):
+ def bigintencode(val: int):
+ if optional and val is None:
+ return None
+ return str(val)
+
+ return bigintencode
+
+
+def bigintdecoder(val):
+ if isinstance(val, float):
+ raise ValueError(f"{val} is a float")
+ return int(val)
+
+
+def decimalencoder(optional: bool, as_str: bool):
+ def decimalencode(val: Decimal):
+ if optional and val is None:
+ return None
+
+ if as_str:
+ return str(val)
+
+ return float(val)
+
+ return decimalencode
+
+
+def decimaldecoder(val):
+ return Decimal(str(val))
+
+
+def map_encoder(optional: bool, value_encoder: Callable):
+ def map_encode(val: Dict):
+ if optional and val is None:
+ return None
+
+ encoded = {}
+ for key, value in val.items():
+ encoded[key] = value_encoder(value)
+
+ return encoded
+
+ return map_encode
+
+
+def map_decoder(value_decoder: Callable):
+ def map_decode(val: Dict):
+ decoded = {}
+ for key, value in val.items():
+ decoded[key] = value_decoder(value)
+
+ return decoded
+
+ return map_decode
+
+
+def list_encoder(optional: bool, value_encoder: Callable):
+ def list_encode(val: List):
+ if optional and val is None:
+ return None
+
+ encoded = []
+ for value in val:
+ encoded.append(value_encoder(value))
+
+ return encoded
+
+ return list_encode
+
+
+def list_decoder(value_decoder: Callable):
+ def list_decode(val: List):
+ decoded = []
+ for value in val:
+ decoded.append(value_decoder(value))
+
+ return decoded
+
+ return list_decode
+
+def union_encoder(all_encoders: Dict[str, Callable]):
+ def selective_encoder(val: any):
+ if type(val) in all_encoders:
+ return all_encoders[type(val)](val)
+ return val
+ return selective_encoder
+
+def union_decoder(all_decoders: List[Callable]):
+ def selective_decoder(val: any):
+ decoded = val
+ for decoder in all_decoders:
+ try:
+ decoded = decoder(val)
+ break
+ except (TypeError, ValueError):
+ continue
+ return decoded
+ return selective_decoder
+
def get_field_name(name):
def override(_, _field_name=name):
return _field_name
@@ -718,12 +862,12 @@ def _val_to_string(val):
if isinstance(val, datetime):
return val.isoformat().replace('+00:00', 'Z')
if isinstance(val, Enum):
- return val.value
+ return str(val.value)
return str(val)
-def _populate_from_globals(param_name: str, value: any, param_type: str, gbls: dict[str, dict[str, dict[str, Any]]]):
+def _populate_from_globals(param_name: str, value: any, param_type: str, gbls: Dict[str, Dict[str, Dict[str, Any]]]):
if value is None and gbls is not None:
if 'parameters' in gbls:
if param_type in gbls['parameters']:
@@ -733,3 +877,16 @@ def _populate_from_globals(param_name: str, value: any, param_type: str, gbls: d
value = global_value
return value
+
+
+def decoder_with_discriminator(field_name):
+ def decode_fx(obj):
+ kls = getattr(sys.modules['sdk.models.shared'], obj[field_name])
+ return unmarshal_json(json.dumps(obj), kls)
+ return decode_fx
+
+
+def remove_suffix(input_string, suffix):
+ if suffix and input_string.endswith(suffix):
+ return input_string[:-len(suffix)]
+ return input_string